欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js中for-in和for-of的區(qū)別詳解

 更新時間:2023年12月19日 08:25:13   作者:小馬甲丫  
在JavaScript中,for-in和for-of是兩種不同的循環(huán)結(jié)構(gòu),本文主要介紹了js中for-in和for-of的區(qū)別,具有一定的參考價值,感興趣的可以了解一下

一、介紹

JavaScript中,for-in 和 for-of 是兩種不同的循環(huán)結(jié)構(gòu),它們有一些重要的區(qū)別和聯(lián)系。

1.1、for-in

for-in 循環(huán)用于遍歷對象的可枚舉屬性。

語法如下:

for (variable in object) {
  // 循環(huán)體
}

在這個循環(huán)中,variable 是我們定義的屬性名,object 是我們要遍歷的對象。

這個循環(huán)會遍歷對象的所有可枚舉屬性(包括它的原型鏈上的屬性),并且屬性名的順序是不確定的。

例如:

如果我們有一個對象 obj,它包含屬性 a、b 和 c,我們可以使用 for-in 循環(huán)來遍歷這些屬性:

let obj = { a: 1, b: 2, c: 3 };  
for (let key in obj) {  
  console.log(key); // 輸出 'a', 'b', 'c' (但順序可能每次不同)  
}

需要注意的是,for-in 不僅會遍歷對象的自身屬性,還會遍歷它的原型鏈上的屬性。

如果你只想遍歷對象的自身屬性,可以使用 Object.keys() 方法來獲取對象的所有鍵名,然后使用 for-of 循環(huán)來遍歷這些鍵名對應(yīng)的值。

1.2、for-of

for-of 循環(huán)用于遍歷可迭代對象(包括 Array,Map,Set,String,TypedArray,arguments對象等等)。

語法如下:

for (value of iterable) {
  // 循環(huán)體
}

在這個循環(huán)中,value 是當(dāng)前迭代到的元素,iterable 是我們要遍歷的可迭代對象。

這個循環(huán)會按照特定的順序遍歷對象的每一個元素。

例如:

let arr = [1, 2, 3];
for (let value of arr) {
  console.log(value); // 輸出 '1', '2', '3' (按照數(shù)組順序)
}

二、區(qū)別

  • for-in 是用于遍歷對象的屬性, for-of 是用于遍歷可迭代對象的元素
  • for-in 會遍歷對象的原型鏈, for-of 則不會

具體而言:

2.1、迭代對象的內(nèi)容不同

for-in 循環(huán)迭代對象的是鍵名,而 for-of 循環(huán)迭代對象的是值。

for-in 循環(huán)適用于迭代對象的鍵名,而 for-of 循環(huán)適用于迭代對象的值。

2.2、迭代對象的類型不同

for-in 循環(huán)適用于遍歷對象,包括普通對象、數(shù)組、函數(shù)等

for-of 循環(huán)適用于遍歷可迭代對象,包括數(shù)組、字符串、Map、Set、TypedArray 等。

2.3、迭代對象的順序不同

for-in 循環(huán)的迭代順序是不確定的,因為對象的屬性沒有固定的順序。

for-of 循環(huán)的迭代順序是確定的,因為可迭代對象的值是按照一定順序排列的。

2.4、迭代對象的原理不同

for-in 循環(huán)遍歷對象時,會遍歷對象的原型鏈,并且會包含從原型鏈繼承的屬性。

for-of 循環(huán)遍歷的對象是可迭代對象,它們的值是可枚舉的。

三、聯(lián)系

  • 雖然它們的應(yīng)用場景不同,但它們都提供了一種方便的方式來遍歷一個集合的元素。
  • 在某些情況下,它們也可以互相替代。

例如

如果你有一個對象數(shù)組,你可以使用 for-of 來遍歷數(shù)組中的每個對象。

同樣,如果你有一個包含鍵值對的對象,你可以使用 for-in 來遍歷這些鍵值對。

四、如何選擇合適的循環(huán)方法

在選擇使用 for-in 循環(huán)還是 for-of 循環(huán)時,我們需要考慮對象的類型以及我們需要迭代的內(nèi)容。

通常,如果我們需要迭代對象的鍵名,我們可以使用 for-in 循環(huán);如果我們需要迭代對象的值,我們可以使用 for-of 循環(huán)。

另外,當(dāng)我們需要遍歷數(shù)組或字符串時,我們可以使用 for-of 循環(huán),因為它可以提供更好的性能和可讀性。相比之下,for-in 循環(huán)會遍歷對象的原型鏈,會導(dǎo)致性能下降。

如果我們需要遍歷一個對象,同時又需要過濾掉從原型鏈繼承的屬性,我們可以使用 hasOwnProperty 方法進(jìn)行過濾。

例如:

const person = {
  name: 'John',
  age: 30,
  gender: 'male'
};
 
for (const key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key, person[key]);
  }
}

五、總結(jié)

for-in 循環(huán)和 for-of 循環(huán)是 JavaScript 中用于迭代對象的兩種方法。

它們的區(qū)別在于 迭代對象的內(nèi)容、類型、順序和原理。

通常,我們應(yīng)該根據(jù)需要選擇合適的循環(huán)方法,以提高效的迭代對象。

同時,我們也需要注意到 for-in 循環(huán)的一些缺陷

由于它會遍歷對象的原型鏈,導(dǎo)致性能下降,而且不能保證迭代順序,所以我們 應(yīng)該避免在數(shù)組和字符串上使用 for-in 循環(huán)

最后,我們還可以使用其他一些方法來迭代對象,

例如 forEach 方法、map 方法、reduce 方法等。

這些方法不僅可以提供更好的性能和可讀性,還可以通過回調(diào)函數(shù)來實現(xiàn)更加靈活的操作。

總的來說,for-in 循環(huán)和 for-of 循環(huán)都是 JavaScript 中用于迭代對象的重要方法。

我們需要根據(jù)對象的類型和需要迭代的內(nèi)容來選擇合適的循環(huán)方法,以提高代碼的性能和可讀性。

同時,我們也需要注意 for-in 循環(huán)的缺陷,并且學(xué)會使用其他方法來迭代對象,以實現(xiàn)更加靈活和高效的操作。

六、最后

到此這篇關(guān)于js中for-in和for-of的區(qū)別的文章就介紹到這了,更多相關(guān)js中for-in和for-of的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談html轉(zhuǎn)義及防止javascript注入攻擊的方法

    淺談html轉(zhuǎn)義及防止javascript注入攻擊的方法

    下面小編就為大家?guī)硪黄獪\談html轉(zhuǎn)義及防止javascript注入攻擊的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 性能優(yōu)化篇之Webpack構(gòu)建代碼質(zhì)量壓縮的建議

    性能優(yōu)化篇之Webpack構(gòu)建代碼質(zhì)量壓縮的建議

    這篇文章主要介紹了性能優(yōu)化篇之Webpack構(gòu)建代碼質(zhì)量壓縮的建議,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • JS顯示下拉列表框內(nèi)全部元素的方法

    JS顯示下拉列表框內(nèi)全部元素的方法

    這篇文章主要介紹了JS顯示下拉列表框內(nèi)全部元素的方法,涉及javascript遍歷下拉列表元素的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Js base64 加密解密介紹

    Js base64 加密解密介紹

    想必大家對base64并不陌生吧,在本文將為大家介紹下Js中的base64加密解密過程,感興趣的朋友不要錯過
    2013-10-10
  • js實現(xiàn)淘寶首頁的banner欄效果

    js實現(xiàn)淘寶首頁的banner欄效果

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)淘寶首頁的banner欄效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • JavaScript仿微博輸入框效果(案例分析)

    JavaScript仿微博輸入框效果(案例分析)

    這篇文章給大家分享一個小的JavaScript的案例,就是模仿微博輸入框的效果,非常不錯,對微博輸入框效果感興趣的朋友通過本文學(xué)習(xí)吧
    2016-12-12
  • JavaScript 錯誤處理與調(diào)試經(jīng)驗總結(jié)

    JavaScript 錯誤處理與調(diào)試經(jīng)驗總結(jié)

    在Web開發(fā)過程中,編寫JavaScript程序時或多或少會遇到各種各樣的錯誤,有語法錯誤,邏輯錯誤。如果是一小段代碼,可以通過仔細(xì)檢查來排除錯誤,但如果程序稍微復(fù)雜點,調(diào)試JS便成為一個令Web開發(fā)者很頭痛的問題。
    2010-08-08
  • JavaScript解構(gòu)賦值的5個常見場景與實例教程

    JavaScript解構(gòu)賦值的5個常見場景與實例教程

    解構(gòu)賦值是一種特殊的語法,它使我們可以將數(shù)組或?qū)ο蟆安鸢睘榈揭幌盗凶兞恐?因為有時候使用變量更加方便,下面這篇文章主要給大家介紹了關(guān)于JavaScript解構(gòu)賦值的5個常見場景與實例的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • JS控制div跳轉(zhuǎn)到指定的位置的幾種解決方案總結(jié)

    JS控制div跳轉(zhuǎn)到指定的位置的幾種解決方案總結(jié)

    這篇文章主要介紹了JS控制div跳轉(zhuǎn)到指定的位置的幾種解決方案總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。
    2016-11-11
  • Echarts地圖添加引導(dǎo)線效果(labelLine)

    Echarts地圖添加引導(dǎo)線效果(labelLine)

    這篇文章主要介紹了Echarts地圖添加引導(dǎo)線效果(labelLine),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論