国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js中的常見的循環(huán)迭代:for loop, forEach, for...in... for...

Leo_chen / 761人閱讀

摘要:下面就總結(jié)下中常見的幾種循環(huán)方法。因?yàn)檠h(huán)將遍歷對象本身的所有可枚舉屬性,以及對象從其構(gòu)造函數(shù)原型中繼承的屬性。上也明確提示不應(yīng)該用于迭代一個(gè),其中索引順序很重要。

引言

平時(shí)工作中循環(huán)的使用場景可以說是非常之多了,昨天改別人代碼時(shí)候有位同事非常喜歡用ES6等新特性,一個(gè)數(shù)組的遍歷全部都是用for...of...,然后業(yè)務(wù)需求要用到數(shù)組中的序號index值,就很尷尬了,我只能改回forEach了。但是for...of...在很多情況下還是很強(qiáng)大的,比如中斷之類的。下面就總結(jié)下js中常見的幾種循環(huán)方法。

常見的循環(huán)方法 for loop

說起for循環(huán),大家的思緒應(yīng)該馬上就回到第一次上計(jì)算機(jī)課時(shí)候的美好大一生活吧,幾乎所有語言通用的循環(huán)方法:

for (var i = 0; i < 10; i++) {
  console.log(i);
}
for (let i = 0; i < products.length; i++) {
  console.log(products[i]);
}

簡單易懂,如果你不知道es5和es6的循環(huán)方法, 就用這個(gè)來對數(shù)組進(jìn)行遍歷,并且可以用break中斷。但是對數(shù)組進(jìn)行循環(huán)包一層這個(gè)條件總歸有些啰嗦,有沒有更簡潔的方法呢?當(dāng)然,繼續(xù)往下看。

forEach

forEach是Array.prototype上的方法,我們可以使用它對數(shù)組進(jìn)行循環(huán)遍歷。因此一個(gè)數(shù)組就可以直接如下調(diào)用此方法即可:

products.forEach(function(product) {
  console.log(product);
});

你不需要先去計(jì)算數(shù)組的總數(shù)才能循環(huán),直接用就可以了。那么如果需要獲取每項(xiàng)的序號呢?forEach方法第二個(gè)參數(shù)就是當(dāng)前循環(huán)項(xiàng)的index值。

products.forEach(function(product,index) {
  console.log(index, product);
});

也就等價(jià)于for循環(huán)中的寫法:
for (var i = 0; i < products.length; i++) {
console.log(i, products[i]);
}

唯一美中不足的就是forEach不支持中斷循環(huán),如果不需要條件中斷循環(huán)數(shù)組的話,采用forEach是最好的選擇,尤其是遍歷一些嵌套數(shù)組雙重循環(huán)時(shí)候,寫起來代碼可讀性會好很多。

for...in...
var arr = [
  "a", 
  "b"
];
for (var i in arr) {
  console.log(i); //0 1
}

以任意順序遍歷一個(gè)對象的可枚舉屬性。大家不要忘了數(shù)組也是對象...我們經(jīng)常用這個(gè)方法來遍歷一個(gè)普通對象,其實(shí)也是可以迭代一個(gè)數(shù)組的,數(shù)組的索引就是0,1,2這樣的數(shù)字。但是強(qiáng)烈建議不要這樣用。因?yàn)檠h(huán)將遍歷對象本身的所有可枚舉屬性,以及對象從其構(gòu)造函數(shù)原型中繼承的屬性。
MDN上也明確提示:for...in不應(yīng)該用于迭代一個(gè) Array,其中索引順序很重要。
并且如果你為了過濾迭代繼承的屬性方法,又要用hasOwnProperty這些方法,非常繁瑣。
總之通常情況下我們不會去要迭代繼承而來的屬性,因此不太推薦使用for...in...
甚至你用forEach這樣做都好一點(diǎn):

Object.keys(obj).forEach(function(key) { console.log(obj[key]) });
for...of...

最后出場也是ES6最新支持的迭代方法就是for...of...。MDN上的定義:
在可迭代對象(包括 Array,Map,Set,String,TypedArray,arguments 對象等等)上創(chuàng)建一個(gè)迭代循環(huán),調(diào)用自定義迭代鉤子,并為每個(gè)不同屬性的值執(zhí)行語句。
可以看到它支持的種類非常多,最常用的就是Arrayarguments了,但是注意雖然支持這么多并不能像for...in...用于普通Object的迭代。上面我們不推薦for...in...應(yīng)用于數(shù)組,那么for...of...就非常合適了:

var arr = [
  "a", 
  "b"
];
for (var i in arr) {
  console.log(i); //a b
}

遍歷數(shù)組,每項(xiàng)直接就是值,并且可以中斷,如果不關(guān)心索引的話,強(qiáng)烈推薦。但是回到引言那里如果你需要索引值這就不是很方便了。但是ES6中有新的entries方法可以讓for...in...也可以獲取索引。

for (let [index, val] of arr.entries()) {
      console.log(index);   
}
總結(jié)

當(dāng)遍歷Array時(shí)候,在需要索引時(shí)候推薦用forEach,不需要索引時(shí)候用for...of...。

當(dāng)?shù)?b>Object時(shí)候,雖然只能用for...in...配合hasOwnproperty過濾不需要的,但我還是推薦用Object.keys()配合forEach

Object.keys(obj).forEach(function(key) { ... });

當(dāng)?shù)?b>String、arguments等可迭代對象時(shí)候,也只能使用for...of...。

參考

MDN for...of

MDN for...in

for..of 獲取索引

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/98969.html

相關(guān)文章

  • [學(xué)習(xí)筆記] ES6數(shù)組遍歷方式 for, forEach,for...in, for...of

    摘要:有如果要遍歷一個(gè)數(shù)組,我們有多個(gè)方式可以進(jìn)行。循環(huán)循環(huán)的問題在于遍歷的時(shí)候獲得的是指針,要獲取元素需要的方式取到。另外迭代的是對象所有的屬性或函數(shù)都會被迭代。選用可以根據(jù)自己的實(shí)際需求。 javascript ES6有如果要遍歷一個(gè)數(shù)組,我們有多個(gè)方式可以進(jìn)行。下面我們來分析一下各自的利弊。 for循環(huán) const langs = [java, php, c++, python] ...

    rozbo 評論0 收藏0
  • JavaScript幾種循環(huán)方式

    摘要:本教程解釋了現(xiàn)代中各種各樣的循環(huán)可能性目錄介紹提供了許多迭代循環(huán)的方法。引入了循環(huán),它結(jié)合了的簡潔性和破解能力注意使用。此循環(huán)在每次迭代中創(chuàng)建一個(gè)新范圍,因此我們可以安全地使用它而不是。 JavaScript提供了許多通過LOOPS迭代的方法。本教程解釋了現(xiàn)代JAVASCRIPT中各種各樣的循環(huán)可能性 showImg(https://segmentfault.com/img/bVbfH...

    Allen 評論0 收藏0
  • JavaScript幾種循環(huán)方式

    摘要:本教程解釋了現(xiàn)代中各種各樣的循環(huán)可能性目錄介紹提供了許多迭代循環(huán)的方法。引入了循環(huán),它結(jié)合了的簡潔性和破解能力注意使用。此循環(huán)在每次迭代中創(chuàng)建一個(gè)新范圍,因此我們可以安全地使用它而不是。 JavaScript提供了許多通過LOOPS迭代的方法。本教程解釋了現(xiàn)代JAVASCRIPT中各種各樣的循環(huán)可能性 showImg(https://segmentfault.com/img/bVbfH...

    piapia 評論0 收藏0
  • JavaScript幾種循環(huán)方式

    摘要:本教程解釋了現(xiàn)代中各種各樣的循環(huán)可能性目錄介紹提供了許多迭代循環(huán)的方法。引入了循環(huán),它結(jié)合了的簡潔性和破解能力注意使用。此循環(huán)在每次迭代中創(chuàng)建一個(gè)新范圍,因此我們可以安全地使用它而不是。 JavaScript提供了許多通過LOOPS迭代的方法。本教程解釋了現(xiàn)代JAVASCRIPT中各種各樣的循環(huán)可能性 showImg(https://segmentfault.com/img/bVbfH...

    ztyzz 評論0 收藏0
  • ES6語法之可迭代協(xié)議和迭代器協(xié)議

    摘要:有兩個(gè)協(xié)議可迭代協(xié)議和迭代器協(xié)議。為了變成可迭代對象,一個(gè)對象必須實(shí)現(xiàn)或者它原型鏈的某個(gè)對象必須有一個(gè)名字是的屬性迭代器協(xié)議該迭代器協(xié)議定義了一種標(biāo)準(zhǔn)的方式來產(chǎn)生一個(gè)有限或無限序列的值。 ECMAScript 2015的幾個(gè)補(bǔ)充,并不是新的內(nèi)置或語法,而是協(xié)議。這些協(xié)議可以被任何遵循某些約定的對象來實(shí)現(xiàn)。有兩個(gè)協(xié)議:可迭代協(xié)議和迭代器協(xié)議。 可迭代協(xié)議 可迭代協(xié)議允許 JavaScri...

    sarva 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<