国产91精品露脸国语对白-国产91精品系列在线观看-国产91精品一区-国产91精品一区二区-精品视频免费看-精品视频免费观看

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

當(dāng)前位置:首頁  >  IT問答庫(kù)  >  Web基礎(chǔ)知識(shí)

4個(gè)Javascript 中的 for 循環(huán)-web前端基礎(chǔ)知識(shí)

發(fā)布:web前端基礎(chǔ)知識(shí) 2022-02-09 14:58

推薦答案

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

·   for

·   for in

·   for each

·   for of

今天,就讓我們一起來看看這4個(gè) for 循環(huán)。

4個(gè)Javascript 中的 for 循環(huán)

 

1、簡(jiǎn)單的for循環(huán)

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

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

 console.log(arr[i]);}

當(dāng)循環(huán)中數(shù)組的長(zhǎng)度沒有變化時(shí),我們應(yīng)該將數(shù)組的長(zhǎng)度存儲(chǔ)在一個(gè)變量中,這樣效率會(huì)更高。下面是改進(jìn)的寫法:

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來遍歷數(shù)組的內(nèi)容,代碼如下:

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

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

一般來說,操作的結(jié)果如下:

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

但這樣做往往會(huì)產(chǎn)生問題。

2.2、 for-in的真相

for-in 循環(huán)遍歷對(duì)象的屬性,而不是數(shù)組的索引。所以for-in遍歷的對(duì)象不限于數(shù)組,也可以遍歷對(duì)象。示例如下:

 const person = {

 fname: “san”,

 lname: “zhang”,

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

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

結(jié)果如下:

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

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

2.3 、關(guān)于數(shù)組的真相

數(shù)組是Javascript中的一個(gè)對(duì)象,Array的索引是屬性名。事實(shí)上,Javascript 中的數(shù)組有點(diǎn)誤導(dǎo)。

Javascript 中的數(shù)組與大多數(shù)其他語言中的數(shù)組不同。首先,Javascript 中的數(shù)組在內(nèi)存中不是連續(xù)的。

其次,Array 的索引不是指偏移量。其實(shí)Array的索引不是Number類型,而是String類型。之所以能正確使用 arr[0] 之類的寫法,是因?yàn)檎Z言可以自動(dòng)改變 Number 類型。0 轉(zhuǎn)換為 String 類型的“0”

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

有趣的是,每個(gè) Array 對(duì)象都有一個(gè) length 屬性,這使得它的行為更像其他語言中的數(shù)組。

但是為什么遍歷Array對(duì)象的時(shí)候不輸出length屬性呢?那是因?yàn)?/font>for-in只能遍歷可枚舉屬性length是不可枚舉屬性,實(shí)際上Array對(duì)象還有很多其他不可枚舉屬性。

現(xiàn)在,讓我們回過頭來看看使用 for-in 循環(huán)數(shù)組的例子。我們修改前面遍歷數(shù)組的例子:

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

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

操作的結(jié)果是:

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

我們看到 for-in 遍歷我們新的“name”屬性,因?yàn)?for-in 遍歷對(duì)象的所有屬性,而不僅僅是索引。

同時(shí),需要注意的是,這里輸出的索引值,即“0”、“1”、“2”不是Number類型,而是String類型,因?yàn)樗鼈兪亲鳛閷傩暂敵龅?,不是索引,這是否意味著我們只能輸出數(shù)組的內(nèi)容,而不能向我們的 Array 對(duì)象添加新屬性?答案是否定的。

因?yàn)?/font>for-in不僅遍歷數(shù)組本身的屬性,還會(huì)遍歷數(shù)組原型鏈上的所有可枚舉屬性。讓我們看一個(gè)例子:

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]);}

操作的結(jié)果是:

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

至此,我們可以發(fā)現(xiàn)for-in并不適合遍歷Array中的元素,它更適合遍歷對(duì)象的屬性,這也是它創(chuàng)建的初衷。有一個(gè)例外,那就是稀疏數(shù)組,閱讀以下示例:

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 僅遍歷現(xiàn)有實(shí)體。上例中for-in遍歷了3次(分別遍歷屬性為“0”、“100”“10000”的元素,普通for循環(huán)會(huì)遍歷10001次)。因此,只要處理得當(dāng),for-in 也可以在遍歷 Array 中的元素方面發(fā)揮巨大的作用。

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

 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.4、 for-in性能

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

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

const obj = {

 “prop1”: “value1”,

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

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

在上面的代碼中,對(duì)象的屬性存儲(chǔ)在一個(gè)數(shù)組中。與for-in搜索每個(gè)屬性相比,代碼只關(guān)注給定的屬性,節(jié)省了循環(huán)的開銷和時(shí)間。

3、forEach

ES5 中,引入了一個(gè)新循環(huán),即 forEach 循環(huán)。

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

 console.log(data);});

操作結(jié)果:

123

forEach 方法對(duì)數(shù)組中包含有效值的每一項(xiàng)執(zhí)行一次回調(diào)函數(shù),那些已經(jīng)被刪除(使用delete 方法等)或從未賦值的項(xiàng)將被跳過(不包括那些未定義的項(xiàng)) 或空值)。回調(diào)函數(shù)會(huì)依次傳入三個(gè)參數(shù):

  • 數(shù)組中當(dāng)前項(xiàng)的值;
  • 當(dāng)前項(xiàng)在數(shù)組中的索引;
  • 數(shù)組對(duì)象本身;

需要注意的是,forEach 遍歷的范圍會(huì)在第一次調(diào)用回調(diào)之前確定。調(diào)用 forEach 后添加到數(shù)組的項(xiàng)目不會(huì)被回調(diào)訪問。

如果現(xiàn)有值發(fā)生變化,則傳遞給callback的值就是forEach遍歷它們時(shí)的值。不會(huì)遍歷已刪除的項(xiàng)目。

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);});

操作結(jié)果:

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類型的,不會(huì)像for-in那樣遍歷原型鏈上的屬性。

因此,在使用forEach時(shí),我們不需要特別聲明索引和要遍歷的元素,因?yàn)檫@些都是作為回調(diào)函數(shù)的參數(shù)。

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

  • every:循環(huán)在第一次返回false后返回
  • some:循環(huán)在第一次返回 true 后返回
  • filter:返回一個(gè)元素滿足回調(diào)函數(shù)的新數(shù)組
  • map:在返回之前處理原始數(shù)組中的元素
  • reduce:依次處理數(shù)組中的元素,將上一次處理的結(jié)果作為下一次處理的輸入,最終得到最終結(jié)果。

forEach 性能

您可以看看jsPerf。在不同瀏覽器下測(cè)試的結(jié)果是forEach沒有for快。如果將測(cè)試代碼放在控制臺(tái)中,可能會(huì)得到不同的結(jié)果。主要原因是控制臺(tái)的執(zhí)行環(huán)境與真實(shí)的代碼執(zhí)行環(huán)境不同。

4、for-of

我們先來看一個(gè)例子:

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

 console.log(data);}

運(yùn)行的結(jié)果是:

abc

為什么要引入for-of

要回答這個(gè)問題,我們先來看看 ES6 之前的 3 for 循環(huán)的缺陷:

forEach 不能中斷和返回;

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

所以,針對(duì)以上缺點(diǎn),我們需要對(duì)原來的for循環(huán)進(jìn)行改進(jìn)。但是 ES6 不會(huì)破壞您已經(jīng)編寫的 JS 代碼。

目前,數(shù)以千計(jì)的網(wǎng)站依賴于 for-in 循環(huán),其中一些甚至將其用于數(shù)組遍歷。通過修復(fù) for-in 循環(huán)來添加數(shù)組遍歷支持會(huì)使這一切變得更加混亂,因此標(biāo)準(zhǔn)委員會(huì)在 ES6 中添加了一個(gè)新的循環(huán)語法來解決當(dāng)前的問題 for-of 。

那么 for-of 能做什么呢?

forEach相比,它可以正確響應(yīng)breakcontinue、return。

for-of 循環(huán)不僅支持?jǐn)?shù)組,還支持大多數(shù)類似數(shù)組的對(duì)象,例如 DOM 節(jié)點(diǎn)列表對(duì)象。

for-of 循環(huán)還支持字符串遍歷,它將字符串作為 Unicode 字符序列進(jìn)行迭代。

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

總結(jié)一下,for-of 循環(huán)具有以下特點(diǎn):

這是迭代數(shù)組元素的最簡(jiǎn)潔直接的語法。

這種方法避免了 for-in 循環(huán)的所有陷阱。

forEach 不同,它正確響應(yīng) break、continue return 語句。

它不僅可以遍歷數(shù)組,還可以遍歷類數(shù)組對(duì)象和其他可迭代對(duì)象。

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

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

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 }

不過,這個(gè)內(nèi)容超出了本文的范圍,Iterator 有很多要講的。

最新問答資訊

01 unity用什么編程語言?unity學(xué)習(xí)難度大嗎

學(xué)習(xí) unity 語言
6020 人關(guān)注

02 python容易學(xué)嗎?學(xué)好python有什么好處?

學(xué)習(xí) python 工作 培訓(xùn)
5389 人關(guān)注

03 html是什么語言?html學(xué)習(xí)難嗎?

學(xué)習(xí) html 語言 可以
5062 人關(guān)注

04 c語言難學(xué)嗎?c語言學(xué)好要多久?

語言 技術(shù) 學(xué)習(xí)
4733 人關(guān)注

06 學(xué)好平面設(shè)計(jì)要多久?報(bào)速成班靠譜嗎?

平面 設(shè)計(jì) 學(xué)習(xí) 時(shí)間
4238 人關(guān)注

相關(guān)問題

測(cè)一測(cè)
你知道多少IT梗

久久精品饰品有限公司网站| 中文字幕乱偷无码AV先锋| 国产精品69人妻无码久久久| 无码无套少妇毛多18PX| 久久99精品久久久久久2021| YSL水蜜桃86| 天堂久久久久VA久久久久 | 777国产偷窥盗摄精品品在线| 人人妻人人爽人人| 国产公妇仑乱在线观看| 亚洲成人无码av| 欧美日本精品一区二区三区| 二虎进入温如玉160章小说| 亚洲欧美日本韩国| 欧美XXXX做受欧美GAY| 国产精品V欧美精品∨日韩| 又大又粗弄得我好爽GIF| 人妻少妇AV无码一区二区| 国产成在线观看免费视频成本人 | 四虎AV永久在线精品免费观看| 久久精品99国产精品日本| 成人无码区免费A∨| 性高朝久久久久久久3小时| 男男激情H视频Gay片GV| 国产伦精品一区二区三区妓女| 18禁强伦姧人妻又大又粗| 无码专区一ⅤA亚洲V天堂| 久久久久精品国产99久久综合| 成视频年人黄网站免费视频| 亚洲制服丝袜无码AV在线| 人妻丰满AV无码中文字幕| 国产精品美女WWW爽爽爽视频 | 国产午夜视频在线观看720P| 一本久久A久久免费精品不卡| 搡老女人老91妇女老熟女oo| 好男人日本社区WWW| YY8840私人影院爱不停下载| 亚洲老熟女 @ TUBEUM TV| 日韩高清不卡无码AV| 久久久久 亚洲 无码 AV 专| 国产成人AV无码精品天堂| 中文字幕AV无码一区二区三区电 | 苍井空电影在线观看| 午夜天堂AV天堂久久久| 欧美大成色WWW永久网站婷| 国产自国产自愉自愉免费24区 | 亚洲一区精品无码色成人| 人妻丰满熟妇AⅤ无码区| 激情综合婷婷丁香五月尤物| 成人无码区免费∨| 亚洲男人第一无码AV网站| 欧美一级 片内射黑人| 精品无码久久久久久久久水蜜桃 | 2019理论韩国理论中文| 亚洲AV无码一区二区三区18| 日本真人无遮挡啪啪免费| 老熟女与小伙偷欢视频| 国产午夜成人AV在线播放| 中文字幕精品无码| 亚洲AV无码专区国产乱码波多野 | 在线观看亚洲AV电影网站| 色狠狠色狠狠综合天天| 毛耸耸性XXXX毛耸耸| 国产CHINESE男男GAY| 47147人文艺术欣赏| 无码熟妇人妻AV在线影院| 麻花传媒剧在线MV免费观看| 国产亚洲AV片在线观看播放| 不卡高清AV手机在线观看| 又粗又大又黄又爽的免费视频| 四川丰满少妇A级毛片| 女人18片毛片60分钟中国| 精品免费久久久久久久| 国产精品18久久久久久VR| TPU色母和PA6色母的性能| 一对浑圆的胸乳被揉捏| 亚洲AV日韩AV高潮喷潮无码天 | 每天都在挨CAO中醒来H| 国产夫妻CCCXXX久久久| 中国老太毛茸茸XXXXHD| 我和子发生了性关系视频| 青青草原综合久久大伊人| 久久天天躁拫拫躁夜夜AV| 国产日韩AV免费无码一区二区三| 99精品视频九九精品视频| 亚洲人成色7777在线观看| 五月丁香色综合久久4438| 日韩AV无码精品一二三区| 男女高潮免费观看无遮挡| 久久精品国产亚洲AV无码娇色 | 差差差30分钟视频轮滑免费| √天堂中文最新版在线中文| 午夜福利YW在线观看2020| 女神被啪到深处娇喘在线观看| 精品一区二区三区东京热| 国产欧美日韩VA另类在线播放| 反差婊吃瓜黑料热门网曝| SLEEP强弙VIDE○SHO| 中文字幕V亚洲日本| 亚洲日韩中文字幕无码专区| 亚洲AV嫩草AV极品在线观看| 偷窥妇科TUBESEX妇| 男女啪啪免费观看网站| 久久久久久久精品国产亚洲 | 绯色AV永久无码一区二区蜜臀| A级毛片毛片免费观的看久| 中日韩精品卡一卡二卡3卡| 性无码免费一区二区三区在线| 色综合久久久久久久久五月| 人妻丰满被色诱中文字幕| 女人天堂亚洲AⅤ在线观看| 老阿姨哔哩哔哩B站肉片茄子芒果| 精品无码人妻少妇久久久久久| 国精产品W灬源码1H855.C| 国产精品亚洲专区无码蜜芽| 国产69精品久久久久观看软件| 成人免费无码大片A毛片18| 永久免费观看国产裸体美女 | 色欲色香天天天综合VVV| 强壮公弄得我次次高潮小说| 精品丝袜人妻久久久久久| 国产日产欧产精品精品蜜芽| JAPANESEⅩⅩⅩHD高潮| 1—36集电视剧免费观看36集 | 小妖精抬起臀嗯啊H军人| 挺进美妇肉蚌深处 | 欧美极品性饥渴少妇大战黑人| 韩日综合成人中文字幕| 成人年无码AV片在线观看| 欲色欲色天天天WWW| 亚洲综合精品伊人久久| 亚洲欧美综合区丁香五月小说| 亚洲成A人片在线不卡一二三区| 亚洲AV成人一区二区三区| 亚洲 无码 国产精品| 午夜精品久久久久久毛片| 无码中文亚洲AV吉吉影音先锋| 我和大佬的365天| 无码国模大尺度视频在线观看| 未成18不能看的视频| 女被啪到深处喷水GIF动态视频| 激情伊人五月天久久综合| 国产成人无码精品一区二区三区| 粗一硬一长一进一爽一A级| 成人观看免费毛片爽| 张柏芝用嘴给陈冠希高潮| 呦女IUU极品资源| 在线观看AV片永久免费| 中国老B亂伦AV| 18禁超污无遮挡无码免费动态图| 亚洲第一AV网站| 天天做天天爱夜夜爽毛片| 欧洲VODAFONEWIFI巨| 情侣过夜的男生会忍住吗| 老师今晚让你爽个够| 麻豆国产精品VA在线观看| 精品亚洲麻豆1区2区3区| 精品一区二区三区| 久久久综合九色综合88| 精品国精品无码自拍自在线| 精品国精品无码自拍自在线| 久久精品国产99精品国产202| 久久精品亚洲一区二区三区浴池 | 无码国产69精品久久久久APP | 人妻丰满熟妇av无码区乱| 人妻少妇精品一区二区三区| 久久精品国产亚洲AⅤ无码| 国产肉体XXXX裸体137大胆| 成人无码区免费视频观看| CAOPOREN个人免费公开| 又爽又黄又无遮挡的视频| 亚洲国产精品18久久久久久| 无码人妻精品一区二区三区99仓 | 2021亚洲爆乳无码专区| 99国内精品久久久久久久| 啊别插了视频髙清在线观看| 白嫩无码人妻丰满熟妇啪啪区百度| 夜夜高潮次次欢爽AV女视频| 尤物爆乳AV导航| 最新精品国偷自产在线下载| AV无码AV天天AV天天爽| 白嫩极品女粉嫩喷水视频的| 粗大黑人巨茎大战欧美成人免费看| 国产AV人人夜夜澡人人爽小说| 国产精品亚洲产品一区二区三区| 粉嫩人妻一区二区三区| 国产精彩乱子真实视频| 国产亚洲精选美女久久久久| 精品久久久久久无码人妻热| 久久午夜夜伦鲁鲁片免费无码| 久久99国产精一区二区三区| 久久久久亚洲AV无码六十路老熟| 免费啪啪全程无遮挡60分钟| 全国主要城市天气预报| 熟妇啊轻点灬大JI巴太粗| 小雪被老汉玩遍各种方式| 亚洲日韩AV无码一区二区三区人| 中国成熟妇女毛茸茸| 俺去俺来也WWW色官网| 国产妇女馒头高清泬20P多毛|