欧美经典日韩精品_日韩高清亚洲日韩精品一区_日韩精品无码综合视频网_国产v亚洲v天堂?无码久久_中文字幕免费无码专区

千鋒教育-做有情懷、有良心、有品質的職業教育機構

當前位置:首頁  >  IT問答庫  >  Web基礎知識

4個Javascript 中的 for 循環-web前端基礎知識

發布:web前端基礎知識 2022-02-09 14:58

推薦答案

  4Javascript 中的 for 循環 ECMAScript5(簡稱 ES5)中,有三個循環。在 2015 6 月發布的 ECMAScript6(簡稱 ES6)中,新增了一種循環類型。他們是:

·   for

·   for in

·   for each

·   for of

今天,就讓我們一起來看看這4for 循環。

4個Javascript 中的 for 循環

 

1、簡單的for循環

我們來看看最常見的寫法:

const arr = [1, 2, 3];for(let i = 0; i < arr.length; i++) {

 console.log(arr[i]);}

當循環中數組的長度沒有變化時,我們應該將數組的長度存儲在一個變量中,這樣效率會更高。下面是改進的寫法:

const arr = [1, 2, 3];for(let i = 0, len = arr.length; i <len; i++) {

 console.log(arr[i]);}

2、for-in

2.1、 使用 for-in

通常,我們可以使用for-in來遍歷數組的內容,代碼如下:

const arr = [1, 2, 3];let index;for(index in arr) {

 console.log(“arr[“ + index + “] = “ + arr[index]);}

一般來說,操作的結果如下:

arr[0] = 1arr[1] = 2arr[2] = 3

但這樣做往往會產生問題。

2.2for-in的真相

for-in 循環遍歷對象的屬性,而不是數組的索引。所以for-in遍歷的對象不限于數組,也可以遍歷對象。示例如下:

 const person = {

 fname: “san”,

 lname: “zhang”,

 age: 99};let info;for(info in person) {

 console.log(“person[“ + info + “] = “ + person[info]);}

結果如下:

person[fname] = sanperson[lname] = zhangperson[age] = 99

需要注意的是for-in遍歷屬性的順序是不確定的,即輸出結果的順序與對象中屬性的順序無關,也與屬性的字母順序無關,也沒有任何其他順序。

2.3 、關于數組的真相

數組是Javascript中的一個對象,Array的索引是屬性名。事實上,Javascript 中的數組有點誤導。

Javascript 中的數組與大多數其他語言中的數組不同。首先,Javascript 中的數組在內存中不是連續的。

其次,Array 的索引不是指偏移量。其實Array的索引不是Number類型,而是String類型。之所以能正確使用 arr[0] 之類的寫法,是因為語言可以自動改變 Number 類型。0 轉換為 String 類型的“0”

因此,Javascript 中從來沒有 Array 索引,只有“0”“1”等屬性。

有趣的是,每個 Array 對象都有一個 length 屬性,這使得它的行為更像其他語言中的數組。

但是為什么遍歷Array對象的時候不輸出length屬性呢?那是因為for-in只能遍歷可枚舉屬性length是不可枚舉屬性,實際上Array對象還有很多其他不可枚舉屬性。

現在,讓我們回過頭來看看使用 for-in 循環數組的例子。我們修改前面遍歷數組的例子:

const arr = [1, 2, 3];arr.name = “Hello world”;let index;for(index in arr) {

 console.log(“arr[“ + index + “] = “+ arr[index]);}

操作的結果是:

arr[0] = 1arr[1] = 2arr[2] = 3arr[name] = Hello world

我們看到 for-in 遍歷我們新的“name”屬性,因為 for-in 遍歷對象的所有屬性,而不僅僅是索引

同時,需要注意的是,這里輸出的索引值,即“0”“1”“2”不是Number類型,而是String類型,因為它們是作為屬性輸出的,不是索引,這是否意味著我們只能輸出數組的內容,而不能向我們的 Array 對象添加新屬性?答案是否定的。

因為for-in不僅遍歷數組本身的屬性,還會遍歷數組原型鏈上的所有可枚舉屬性。讓我們看一個例子:

Array.prototype.fatherName = “Father”;const arr = [1, 2, 3];arr.name = “Hello world”;let index;for(index in arr) {

 console.log(“arr[“ + index + “] = “+ arr[index]);}

操作的結果是:

arr[0] = 1arr[1] = 2arr[2] = 3arr[name] = Hello worldarr[fatherName] = Father

至此,我們可以發現for-in并不適合遍歷Array中的元素,它更適合遍歷對象的屬性,這也是它創建的初衷。有一個例外,那就是稀疏數組,閱讀以下示例:

let key;const arr = [];arr[0] = “a”;arr[100] = “b”;arr[10000] = “c”;for(key in arr) {

 if(arr.hasOwnProperty(key) &&

 /?$|^[1–9]\d*$/.test(key) &&

 key <= 4294967294

 ) {

 console.log(arr[key]);

 }}

For-in 僅遍歷現有實體。上例中for-in遍歷了3次(分別遍歷屬性為“0”“100”“10000”的元素,普通for循環會遍歷10001次)。因此,只要處理得當,for-in 也可以在遍歷 Array 中的元素方面發揮巨大的作用。

為了避免重復工作,我們可以包裝上面的代碼:

 function arrayHasOwnIndex(array, prop) {

 return array.hasOwnProperty(prop) &&

 /?$|^[1–9]\d*$/.test(prop) &&

 prop <= 4294967294; // 2³²-2}

用法示例如下:

for (let key in arr) {

 if (arrayHasOwnIndex(arr, key)) {

 console.log(arr[key]);

 }}

2.4for-in性能

如上所述,每次迭代操作都會同時搜索實例或原型屬性。for-in 循環的每次迭代都會產生更多的開銷,所以它比其他循環類型慢,一般速度是其他循環類型的 1/7

因此,除非您明確需要迭代具有未知數量屬性的對象,否則您應該避免使用 for-in 循環。如果需要遍歷有限數量的已知屬性列表,使用其他循環會更快,例如以下示例:

const obj = {

 “prop1”: “value1”,

 “prop2”: “value2”};const props = [“prop1”, “prop2”];for(let i = 0; i <props.length; i++) {

 console.log(obj[props[i]]);}

在上面的代碼中,對象的屬性存儲在一個數組中。與for-in搜索每個屬性相比,代碼只關注給定的屬性,節省了循環的開銷和時間。

3、forEach

ES5 中,引入了一個新循環,即 forEach 循環。

const arr = [1, 2, 3];arr.forEach((data) => {

 console.log(data);});

操作結果:

123

forEach 方法對數組中包含有效值的每一項執行一次回調函數,那些已經被刪除(使用delete 方法等)或從未賦值的項將被跳過(不包括那些未定義的項) 或空值)。回調函數會依次傳入三個參數:

  • 數組中當前項的值;
  • 當前項在數組中的索引;
  • 數組對象本身;

需要注意的是,forEach 遍歷的范圍會在第一次調用回調之前確定。調用 forEach 后添加到數組的項目不會被回調訪問。

如果現有值發生變化,則傳遞給callback的值就是forEach遍歷它們時的值。不會遍歷已刪除的項目。

const arr = [];arr[0] = “a”;arr[3] = “b”;arr[10] = “c”;arr.name = “Hello world”;arr.forEach((data, index, array) => {

 console.log(data, index, array);});

操作結果:

a 0 [“a”, 3: “b”, 10: “c”, name: “Hello world”]b 3 [“a”, 3: “b”, 10: “c”, name: “Hello world”]c 10 [“a”, 3: “b”, 10: “c”, name: “Hello world”]

這里的索引是Number類型的,不會像for-in那樣遍歷原型鏈上的屬性。

因此,在使用forEach時,我們不需要特別聲明索引和要遍歷的元素,因為這些都是作為回調函數的參數。

另外,forEach 會遍歷數組中的所有元素,但是 ES5 定義了一些其他有用的方法,下面是一部分:

  • every:循環在第一次返回false后返回
  • some:循環在第一次返回 true 后返回
  • filter:返回一個元素滿足回調函數的新數組
  • map:在返回之前處理原始數組中的元素
  • reduce:依次處理數組中的元素,將上一次處理的結果作為下一次處理的輸入,最終得到最終結果。

forEach 性能

您可以看看jsPerf。在不同瀏覽器下測試的結果是forEach沒有for快。如果將測試代碼放在控制臺中,可能會得到不同的結果。主要原因是控制臺的執行環境與真實的代碼執行環境不同。

4、for-of

我們先來看一個例子:

const arr = [‘a’, ‘b’, ‘c’];for(let data of arr) {

 console.log(data);}

運行的結果是:

abc

為什么要引入for-of

要回答這個問題,我們先來看看 ES6 之前的 3 for 循環的缺陷:

forEach 不能中斷和返回;

for-in 的劣勢更加明顯。它不僅遍歷數組中的元素,還遍歷自定義屬性,甚至訪問原型鏈上的屬性。此外,遍歷數組元素的順序可以是隨機的。

所以,針對以上缺點,我們需要對原來的for循環進行改進。但是 ES6 不會破壞您已經編寫的 JS 代碼。

目前,數以千計的網站依賴于 for-in 循環,其中一些甚至將其用于數組遍歷。通過修復 for-in 循環來添加數組遍歷支持會使這一切變得更加混亂,因此標準委員會在 ES6 中添加了一個新的循環語法來解決當前的問題 for-of

那么 for-of 能做什么呢?

forEach相比,它可以正確響應breakcontinuereturn

for-of 循環不僅支持數組,還支持大多數類似數組的對象,例如 DOM 節點列表對象。

for-of 循環還支持字符串遍歷,它將字符串作為 Unicode 字符序列進行迭代。

for-of 還支持 Map Set(都是 ES6 中的新功能)對象遍歷。

總結一下,for-of 循環具有以下特點:

這是迭代數組元素的最簡潔直接的語法。

這種方法避免了 for-in 循環的所有陷阱。

forEach 不同,它正確響應 breakcontinue return 語句。

它不僅可以遍歷數組,還可以遍歷類數組對象和其他可迭代對象。

然而,應該注意的是,for-of 循環不支持普通對象,但是如果您想遍歷一個對象的屬性,您可以使用 for-in 循環(它就是這樣做的)。

最后,但并非最不重要的是,ES6 引入了另一種方法來迭代數組的值,那就是 Iterator。最后一個例子:

const arr = [‘a’, ‘b’, ‘c’];const iter = arr[Symbol.iterator]();iter.next() // { value: ‘a’, done: false }iter.next() // { value: ‘b’, done: false }iter.next() // { value: ‘c’, done: false }iter.next() // { value: undefined, done: true }

不過,這個內容超出了本文的范圍,Iterator 有很多要講的。

最新問答資訊

01 unity用什么編程語言?unity學習難度大嗎

學習 unity 語言
6020 人關注

02 python容易學嗎?學好python有什么好處?

學習 python 工作 培訓
5389 人關注

03 html是什么語言?html學習難嗎?

學習 html 語言 可以
5062 人關注

04 c語言難學嗎?c語言學好要多久?

語言 技術 學習
4733 人關注

06 學好平面設計要多久?報速成班靠譜嗎?

平面 設計 學習 時間
4238 人關注

相關問題

html是什么語言?html學習難嗎?

在it行業涉及到各種專業的知識,作為一個工作人員掌握一些基礎的...

前端技術有哪些?

互聯網行業的發展速度很快,特別是在前端這個崗位,如果不能時刻...

web前端開發需要掌握哪些知識

同時學會css,css是用來美化html頁面的為頁面提供布局和格式,最...

javascript是干什么的?JavaScript日常用途是什么

同學,你好!javascript是干什么的?JavaScript日常用途是什么?...

web前端有哪些框架?

同學您好,web前端總共有11個框架,因為web前端框架可以很大程度...

學web前端需要學什么知識

更多關于web前端培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教...

測一測
你知道多少IT梗

亚洲一线产区二线产区分布图片| 久久久久久久精品2| А√中文在线天堂| 久久精品国产亚洲7777| 亚洲精品四区麻豆文化传媒| 好爽毛片一区二区三区四| 午夜在线观看的免费网站| 国产成人无码18禁午夜福利P| 日韩欧洲亚洲SUV| GAY男同帅哥网站在线观看| 免费观看无遮挡WWW的视频| 亚洲夂夂婷婷色拍WW47| 精品无码一区二区三区水蜜桃 | 人妻被按摩到潮喷中文不卡| 99久久精品日本一区二区免费| 欧美人与性囗牲恔配视频0| 锕锕锕锕锕锕锕锕好疼小视频软件| 亚洲AⅤ爽爽香蕉久久影片| 精产国品一二三产区M553| 亚洲人成电影一区二区在线| 久久久无码精品亚洲日韩蜜桃| 与上司出轨的人妻| 欧美高大丰满FREESEX| SM调教贱屁股眼哭叫求饶H| 人人超人人超碰超国产| 夫妇交换性三中文字幕| 无码熟妇ΑⅤ人妻又粗又大| 娇妻丁字裤公交车被在线观看| 草草地址线路①屁屁影院成人 | 久久精品国产亚洲AV高清热| 国产成人亚洲综合网站小说| WWW.一区二区三区在线 || 亚洲人成人无码www在线观看| 铜铜铜铜铜铜铜好大好深色板| 国产欧美亚洲日韩图片| 亚洲精品亚洲人成人网| 深灬深灬深灬深灬一点| 果冻传媒影视在线播放| 野花免费观看日本电视剧| 欧美另类精品黑人巨大| 精品麻豆一区二区三区乱码| 中文在线っと好きだった最新版| 欧美老熟妇乱XXXXX| 久久99精品国产麻豆婷婷| 99热成人精品热久久6网站| 亚洲精品天堂无码中文字幕 | 91蜜桃传媒精品久久久一区二区| 全球AV集中精品导航福利| 久久久久久亚洲AV无码专区| 好紧我太爽了视频免费国产| 国产精品白丝JK白祙喷水视频| 亚洲碰碰人人AV熟女天堂| 无遮挡色视频真人免费不卡| 久久久久久精品免费S| 国产一区二区H无遮挡| 中国OLDWOMAN老熟妇| 人与物VIDEOS另类XXXX| 国产日产欧产精品品不卡| 纯肉无遮挡H肉动漫在线观看国产| 亚洲AV六月丁香七月婷婷| 老湿机香蕉久久久久久| 成人无码区免费AⅤ片WWW软件| 性色欲情网站IWWW九文堂| 领导边摸边吃奶边做爽在线观看| 精品国产乱码久久久久夜深人妻| JIZZJIZZ免费看国产| 中国MACBOOKPRO高清| 一面膜上边一面膜下边53分钟 | 欧美性极品少妇精品网站| 国产精品免费久久久久影院| 伊人久久中文字幕| 搡老女人P老熟妇老熟女| 久久精品国产99精品国产202| 国产亚洲精久久久久久无码7| 23部禽女乱小说内| 无遮挡色视频真人免费不卡| 四川少妇XXXX内谢欧美| 久久五月丁香中文字幕| 把腿张开老子CAO烂你NP皇宫| 亚洲AV最新在线网址| 欧美丰满美乳XXⅩ高潮www| 国产帅男男GAY网站视频| 99久久国产综合精品五月天喷水 | 欧亚尺码专线欧洲B1B1| 国外B站推广网站| 国产午夜福利精品一区二区三区 | 波多野结衣av无码久久一区| 亚洲精品卡2卡三卡4卡2卡乱码| 亚洲AV无码乱码国产精品久久| 欧洲人激情毛片无码视频| 国精产品一区一区三区| 啊轻点灬大JI巴太粗太长了在线| H纯肉无遮掩3D动漫在线观看| YY8840私人影院爱不停下载| 亚洲熟妇AV一区二区三区下载| 日日摸夜夜添夜夜添无码免费视频| 久久精品国产亚洲AV麻豆AⅤ| 久久精品国产99精品最新| 久久久久亚洲AV成人无码网站| 美女裸体无遮挡永久免费视频AP | 老妇饥渴XXHDⅩXXOOO| 国产精品亚洲第一区焦香味| 99精品国产一区二区电影| 亚洲精品无码AⅤ中文字幕蜜桃| 亚洲日本VA一区二区三区| 丝袜国偷自产中文字幕| 乌克兰少妇XXXX做受| 青青青国产手线观看视频2019| 日产精品1卡二卡三卡| 久久夜色精品国产噜噜亚洲AV| 麻花豆传媒剧国产MV入口| 狠狠色婷婷久久一区二区三区| 厨房掀起裙子从后面进去视频| 高清中文字幕成人AV| 国产亚洲精品自在久久| 久久国产免费直播| 欧美金妇欧美乱妇XXXX| 少妇人妻88久久中文字幕| 欧美一级 片内射黑人B| 日本JAPANESE醉酒人妻| 无码国产成人午夜在线观看| 日韩国产欧美亚洲V片| 免费看成人毛片无码视频| 人妻少妇粗大持久满足| 男女爽爽午夜18禁影院免费| 久久国产精品成人免费| 免费十大软件大全下载安装| 久久久久精品老熟女国产精品| 男人边吃奶边做好爽免费视频| 日韩精品久久久免费观看| 性色AV一区二区三区无码| 永久免费AV无码国产网站| 成人毛片100部免费看| FIREEXⅩ性欧美HD护士| 张柏芝用嘴给陈冠希高潮| YSL千人千色8610| 国产精品亚洲综合一区在线观看 | 欧美亚洲精品中文字幕乱码| 婷婷久久综合九色综合97最多收| 亚洲精品国偷自产在线| AV中文字幕潮喷人妻系列| 中文乱码人妻系列一区二区| 波多野结衣av在线| 狠狠干2015最新版| 欧美性猛交XXXX乱大交丰满| 无码人妻AⅤ一区二区三区水密桃| 熟妇的奶头又大又粗视频| 亚洲第一狼人天堂网亚洲AV| 亚洲AV永久无码精品无码一区二区 | 无码专区人妻系列日韩精品少妇 | 亚洲AV成人一区二区三区不卡| 永久免费看啪啪的网站| 粗了大了 整进去好爽视频| 精品人妻中文无码AV在线| 人与动人物XXXXAV片| 亚洲欧美色国产综合| 产成人亚洲精品无码青青草原| 狠狠做深爱婷婷综合一区| 国内精品视频一区二区三区 | 久久不见久久见中文字幕免费| 日本人妻丰满熟妇久久久久久| 日本三级吃奶头添泬| 亚洲AV无码专区日韩乱码不卡| YYYY1111少妇影院在线观| 国产中文成人精品久久久| 亲子伦AV一区的三区| 亚洲欧洲日产国码无码| 疯狂做受XXXX高潮国产| 美女与野兽在线观看| 午夜成人影片在线观看免费完整高 | 饥渴人妻精油按摩无码专区 | 少妇高潮喷水久久久影院| 野花日本免费完整版高清版| 国产成人久久精品激情| 男人女人免费啪啪观看| 强制高潮18XXXXHD日韩| 亚洲国产精品久久久久蜜桃网站 | 亚洲VA在线VA天堂VA无码| MACBOOKPRO免费观看| 精品无人乱码高清| 天天摸夜夜添狠狠添婷婷| 午夜福利1000集合集92| 999久久久国产精品| 欢迎来到精灵の森林1到四集| 日本公与丰满熄的| 中国大陆高清AⅤ毛片| 国产中国男男GayGay| 色老汉亚洲AV影院天天| 27邪态恶动图GIF喷水赞一把| 好黄好污美女裸体网站| 少妇厨房愉情理伦片BD在线观看 | 18禁美女黄网站色大片免费观看| 97人妻人人揉人人躁人人| 国精一二二产品无人区免费应用| 日本黄色免费在线观看| 中文字幕丰满乱子无码视频| 宝宝好涨水快流出来免费视频 | 国产成人精品午夜福利在线播放 | 国产草草影院CCYYCOM| 欧美肉体裸交做爰XXXⅩ性|