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

資訊專欄INFORMATION COLUMN

【快速入門系列】簡述 for...in 和 for...of 區(qū)別

ashe / 3065人閱讀

摘要:像和使用內置構造函數(shù)所創(chuàng)建的對象都會繼承自和的不可枚舉屬性,例如的方法或的方法。循環(huán)將遍歷對象本身的所有可枚舉屬性,以及對象從其構造函數(shù)原型中繼承的屬性更接近原型鏈中對象的屬性覆蓋原型屬性。遍歷數(shù)組時推薦使用,其中為數(shù)組每一項的值。

引言

在對數(shù)組或對象進行遍歷時,我們經(jīng)常會使用到兩種方法:for...infor...of,那么這兩種方法之間的區(qū)別是什么呢?讓我們來研究研究。

一、for...in

首先我們看下MDN對for...in方法的解釋:for...in | MDN

for...in 循環(huán)只遍歷可枚舉屬性。像 Array和 Object使用內置構造函數(shù)所創(chuàng)建的對象都會繼承自Object.prototype和String.prototype的不可枚舉屬性,例如 String 的 indexOf()  方法或 Object的toString()方法。循環(huán)將遍歷對象本身的所有可枚舉屬性,以及對象從其構造函數(shù)原型中繼承的屬性(更接近原型鏈中對象的屬性覆蓋原型屬性)。

首先,我們簡單的使用for...in分別對對象和數(shù)組進行遍歷:

// 遍歷對象
let obj = {
  a: 1,
  b: 2,
  c: 3
};
for(let item in obj) {
  console.log("item:" + item);
  console.log(obj[item]);
}

// 運行結果
item:a
1
item:b
2
item:c
3
// 遍歷數(shù)組
let arr = [1, 2, 3];
for(let item in arr) {
  console.log("item:" + item);
  console.log(arr[item]);
}

// 運行結果
item:0
1
item:1
2
item:2
3

我們發(fā)現(xiàn),使用for...in進行遍歷時,item值為對象的key,為數(shù)組的index。
我們知道,數(shù)組索引只是具有整數(shù)名稱的枚舉屬性,并且與通用對象屬性相同,因此不能保證for...in以某種固定的順序返回索引,因此,不推薦使用for...in進行數(shù)組的遍歷

下面,我們在上面代碼的基礎上,在arr數(shù)組上增加一個自定義屬性,再次遍歷,查看結果。

arr.name = "arrName";
for(let item in arr) {
  console.log("item:" + item);
  console.log(arr[item]);
}

// 運行結果
item:0
1
item:1
2
item:2
3
item:name
arrName

我們發(fā)現(xiàn),for...in不僅會遍歷數(shù)組中的元素,還會遍歷自定義屬性。

二、for...of

說完for...in我們再來看看for...of,我們還是先來看看MDN對其的解釋 for...of | MDN

for...of語句在可迭代對象(包括 Array,Map,Set,String,TypedArray,arguments 對象等等)上創(chuàng)建一個迭代循環(huán),調用自定義迭代鉤子,并為每個不同屬性的值執(zhí)行語句。

同樣的,我們還是使用與for...in相同的代碼進行測試

// 遍歷對象
let obj = {
  a: 1,
  b: 2,
  c: 3
};
for(let item of obj) {
  console.log("item:" + item);
  console.log(obj[item]);
}

// 運行結果
for(let item of obj) {
                ^

TypeError: obj is not iterable
...
// 遍歷數(shù)組
let arr = [1, 2, 3];
for(let item of arr) {
  console.log("item:" + item);
  console.log(arr[item]);
}

// 運行結果
item:1
undefined
item:2
undefined
item:3
undefined

我們可以看出,使用for...of對對象進行遍歷時,報了TypeError: obj is not iterable錯誤,對數(shù)組進行遍歷時,item直接是數(shù)組每一項的值

我們再為arr增加自定義屬性,查看效果。

arr.name = "arrName";
for(let item in arr) {
  console.log("item:" + item);
  console.log(arr[item]);
}

// 運行結果
item:1
undefined
item:2
undefined
item:3
undefined

for...of沒有對數(shù)組的自定義屬性進行遍歷。

三、總結

根據(jù)以上測試結果并參考了相關資料,我們得出了以下結論:

遍歷對象時推薦使用for...in,其中item為對象的key。使用for...of會報錯。

遍歷數(shù)組時推薦使用for...of,其中item為數(shù)組每一項的值。使用for...in則不能保證遍歷順序且會遍歷出自定義屬性。

for...in是ES5特性,for...of是ES6特性,因此需要注意兼容性。

如果要使用for...of遍歷普通對象,需要配合Object.keys()一起使用。

結束語

以上內容是我們對for...infor...of的測試對比,在使用時記住其區(qū)別可更快的編寫代碼和排查錯誤,若想了解其更深層區(qū)別,建議認真閱讀MDN相關資料。

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94911.html

相關文章

  • javaScript中 for...in for...of區(qū)別

    摘要:和的差異解析是標準,是針對的不足而補充的方法。遍歷的是數(shù)組中元素的值。當使用遍歷數(shù)組的時候,我們得到的實際上是數(shù)組的索引值鍵值,同時如果數(shù)組存在別的屬性的話,也會被遍歷出來。甚至可以遍歷到對象的原型方法和屬性一個栗子參考簡述中與區(qū)別 for...in和for...of使用場景差異 一句話:遍歷對象的屬性時,用for...in。想遍歷數(shù)組中元素的值的話,用for...of。 for......

    alanoddsoff 評論0 收藏0
  • 前端面試題總結(js、html、小程序、React、ES6、Vue、算法、全棧熱門視頻資源)

    摘要:并總結經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快速搭建項目。 本文是關注微信小程序的開發(fā)和面試問題,由基礎到困難循序漸進,適合面試和開發(fā)小程序。并總結vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快...

    pumpkin9 評論0 收藏0
  • 前端面試題總結(js、html、小程序、React、ES6、Vue、算法、全棧熱門視頻資源)

    摘要:并總結經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快速搭建項目。 本文是關注微信小程序的開發(fā)和面試問題,由基礎到困難循序漸進,適合面試和開發(fā)小程序。并總結vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快...

    Carson 評論0 收藏0
  • 前端面試題總結(js、html、小程序、React、ES6、Vue、算法、全棧熱門視頻資源)

    摘要:并總結經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快速搭建項目。 本文是關注微信小程序的開發(fā)和面試問題,由基礎到困難循序漸進,適合面試和開發(fā)小程序。并總結vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項目,在瀏覽器端的層面上提升速度,幫助初中級前端工程師快...

    muzhuyu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<