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

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

當(dāng)前位置:首頁(yè)  >  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.2for-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ù)其他語(yǔ)言中的數(shù)組不同。首先,Javascript 中的數(shù)組在內(nèi)存中不是連續(xù)的。

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

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

有趣的是,每個(gè) Array 對(duì)象都有一個(gè) length 屬性,這使得它的行為更像其他語(yǔ)言中的數(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.4for-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)語(yǔ)法來解決當(dāng)前的問題 for-of

那么 for-of 能做什么呢?

forEach相比,它可以正確響應(yīng)breakcontinuereturn

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)潔直接的語(yǔ)法。

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

forEach 不同,它正確響應(yīng) breakcontinue return 語(yǔ)句。

它不僅可以遍歷數(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用什么編程語(yǔ)言?unity學(xué)習(xí)難度大嗎

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

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

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

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

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

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

語(yǔ)言 技術(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梗

WWW夜插内射视频网站| 高清不卡亚洲日韩AV在线| 人妻被按摩到潮喷中文不卡| 全球AV集中精品导航福利 | 亚洲综合小说另类图片五月天| 国产麻豆精品久久一二三 | 性少妇VIDEOXXX欧美69| 免费无遮挡无码永久视频| 国产成人综合亚洲精品| 综合无码一区二区三区四区五区| 无码丰满人妻熟妇区| 国产精品丝袜无码不卡一区| 无码人妻一区二区三区在线| 免费观看片的APP下载| 国产精品自在在线午夜| WWW.国产白丝袜护士喷白浆| 人妻少妇精品视频一区二区三区| 国产最大成人亚洲精品| 亚洲成AV人片在线观看无码不卡| 欧美亚洲精品SUV| 精品久久亚洲中文字幕| 高清欧美性猛XXXX黑人| 91人妻人人妻人人爽人人精品| 亚洲成AV人影片在线观看| 熟妇女领导呻吟疯狂| 欧美VIDEOS另类色HDFR| 久久se精品一区二区| 国产精品久久久久久亚洲影视| СЕКС日本ВИДЕ视频 | 久久精品亚洲男人的天堂| 国产成人18黄网站| ASS少妇PICS粉嫩BBW| 亚洲人成图片小说网站| 无码丰满熟妇浪潮一区二区AV| 欧美乱码伦视频免费| 久久久久人妻精品区一| 国产免费福利在线视频| 成人午夜亚洲精品无码区毛片| 又大又硬又粗再深一点| 亚洲国产成人精品无码区在线网站 | 亚洲AV综合AV一区二区综合| 日日摸夜夜添夜夜添无| 欧美猛少妇色XXXXⅩ| 久久久久精品国产亚洲AV麻豆 | 无码国内精品人妻少妇| 人妻精品久久久久中文字幕| 免费A级毛片18禁网站APP| 久久精品中文字幕有码| 激情国产AV做激情国产爱| 国产精品无码无片在线观看3D| 成人看片黄APP免费看软件| 小婷又软又嫩又紧水又多的软件| 日本成熟人妻HD| 欧美人与性口牲恔配视频| 免费播放AV网站的地址| 久久精品国产国产精品四凭| 好大的奶好爽浪蹄子| 91人人妻人人澡人人爽精品| 亚洲最大的成人网站| 亚洲爆乳AAA无码专区| 午夜性色一区二区三区不卡视频| 色综合伊人色综合网站 | 欧美日本精品一区二区三区| 蜜桃视频一区二区| 久久婷婷综合色丁香五月| 久久99精品久久久久久野外 | 国产男男GayGay裸交视频| 国产成人精品免高潮在线观看| 成人一区二区三区| 成年性生交大片免费看| 波多野结衣的影片| 啊灬啊灬啊灬快灬高潮了AV| JAPANRCEP老熟妇乱子伦视频| 午夜在线观看的免费网站| 少妇愉情理伦片高潮日本| 日日噜噜夜夜狠狠视频无码| 日本japanese人妻护士| 日韩AV蜜桃在线观看| 九九久久亚洲AV东方伊甸园| 极品人妻系列人妻30P| 狠狠色成人一区二区三区| 国内精品卡一卡二卡三| 极品粉嫩嫩模大尺度无码视频 | 苍井空浴缸大战猛男120分钟| 亚洲GV天堂无码男同在线观看| 性少妇JEALOUSVUE片| 午夜阳光精品一区二区三区| 午夜亚洲AV日韩AV无码大全| 午夜亚洲AⅤ无码高潮片在线观看 午夜亚洲AⅤ无码高潮片苍井空 | 国产激情久久久久影院小草| 国产高清午夜人成在线观看| 国产精品一区二区国产馆蜜桃| 国产在线乱码一区二区三区| 狠狠色噜噜狠狠狠888777米| 久久成人国产精品免费软件| 久久综合精品国产一区二区三区无| 国产V亚洲V天堂无码久久久| 在线观看国产精选免费| 三级日本高清完整版热播| 日韩爆乳一区二区无码| 少妇无码AV无码专区线Y| 无码秘 人妻一区二区三区| 小雪的L3又嫩又紧又多水图 | 被黑人上司侵犯狂草内射| 成人无码网WWW在线观看| 国产精品成人AV片免费看| 狠狠色噜噜狠狠狠888米奇视频| 久久精品亚洲中文字幕无码网站| 免费黄色网站久久精品| 人人妻人人做人人爽| 无码人妻一区二区三区免费视频| 亚洲国产婷婷综合在线精品 | 亚洲AV无码专区国产乱码软件| 亚洲人成网站在线播放942| 无码超级大爆乳在线播放| 亚洲AV成人片在线观看18| 色在线 | 国产| 香港三日本三级少妇三级视频| 亚洲精品国产AⅤ成拍色拍| 在线观看一区二区三区AV| 被客人玩得站不起来大前端 | 国产蜜臀AV无码一区二区三区| 极品少妇高潮到爽| 蜜臀av无码少妇一区二区三区| 日本一卡2卡3卡4卡| 午夜香吻视频在线看免费| 亚洲无人区码二码三码区别图| 2021日韩无码| 国产AⅤ精品一区二区三区久久| JAPANESEHD熟女熟妇伦| 高潮娇喘抽搐喷水潮喷视频网站| 国精产品一线二线三线 | 精品韩国亚洲AV无码不卡区| 免费看美女被靠到爽的视频| 人人玩人人添人人澡| 亚洲AV成人片无码网站| 中文乱码人妻系列一区二区| 亚洲香蕉成人AV网站在线观看| 51精产国品一二三产区区| 国产AV一区二区二三区妇| 久激情内射婷内射蜜桃| 人妻人人爽人人澡人人喊| 亚洲AⅤ永久无码精品| 岳妇伦丰满69ⅩⅩ| 丰满少妇被猛烈进入| 精品人人妻人人澡人人爽人人| 韩国善良的小峓子在钱| 蜜芽VA亚洲VA欧美VA天堂| 四川小少妇BBAABBAA| 亚洲熟妇无码乱子AV电影| 波多野结衣放荡的护士| 精品国产YW在线观看| 人妻在线无码一区二区三区| 欧洲亚洲国产成人综合色婷婷| 五十路熟妇亲子交尾| 中文字幕V亚洲日本在线| 国产DB624色谱柱36521| 久久亚洲日韩成人无码导航| 久久天堂AV女色优精品| 日韩论理论片在线观看| 亚洲色成人网站WWW永久小说| 波多野结衣乳巨码无在线| 精品亚洲国产成人小电影| 日韩久久无码免费毛片软件| 野花韩国视频观看免费高清的| 粉嫩粉嫩的18在线免免费观看| 久久夜色精品国产噜噜麻豆| 无码AV最新高清无码专区| 99精品国产福利在线观看 | 亚洲精品成人网久久久久久| 阿娇13分钟视频无删减MP4| 精品国产性色无码AV网站| 日韩一区二区在线观看视频| 一二三四免费观看在线6| 国产成人午夜性A一级毛片老女人| 美女高潮无遮挡免费视频| 亚洲AⅤ无码成人网站国产APP| 八戒八戒神马影院在线观看1| 精品人妻A∨一区二区夫上司犯| 日韩亚洲欧美久久久WWW综合| 永久免费精品精品永久-夜色| 国产精品一区二区 尿失禁 | 女主播屁G裸露W身曝光| 亚洲丰满多毛XXXⅩ熟妇| 高清一区二区三区免费视频| 免费无码又爽又刺激高潮的漫画 | 精品少妇人妻av免费久久洗澡| 日韩免费A级毛片无码A∨| 在线观看高H无码黄动漫| 国产又色又刺激高潮免费视频试看| 人妻少妇精品视频三区二区一区| 亚洲欧美综合区丁香五月小说| 国产成人无码一区二区三区在线 | 小SB几天没做又欠CH| JAPANESE人妻中文字幕| 久久亚洲色WWW成人网址| 亚洲AV中文AⅤ无码AV浪潮| 成人一区二区三区| 欧美丰满美乳XXⅩ高潮www| 亚洲中文字幕日产乱码小说|