for in和for of的用法與區別

2021-10-07 05:02:53 字數 1179 閱讀 3849

一句話概括:for in是遍歷(object)鍵名,for of是遍歷(array)鍵值。

文章的內容大部分來自mdn。

for...in 迴圈只遍歷可列舉屬性(包括它的原型鏈上的可列舉屬性)。像 array和object使用內建建構函式所建立的物件都會繼承自object.prototype和string.prototype的不可列舉屬性,例如 string 的 indexof() 方法或 object的tostring()方法。迴圈將遍歷物件本身的所有可列舉屬性,以及物件從其建構函式原型中繼承的屬性(更接近原型鏈中物件的屬性覆蓋原型屬性)。

var obj = ;

for (let key in obj)

// a

// b

// c

for...of語句在可迭代物件(包括array,map,set,string,typedarray,arguments 物件等等)上建立乙個迭代迴圈,呼叫自定義迭代鉤子,並為每個不同屬性的值執行語句

const array1 = ['a', 'b', 'c'];

for (const val of array1)

// a

// b

// c

for of不可以遍歷普通物件,想要遍歷物件的屬性,可以用for in迴圈, 或內建的object.keys()方法

無論是for...in還是for...of語句都是迭代一些東西。它們之間的主要區別在於它們的迭代方式。

for...in語句以任意順序迭代物件的可列舉屬性。

for...of 語句遍歷可迭代物件定義要迭代的資料。

以下示例顯示了與array一起使用時,for...of迴圈和for...in迴圈之間的區別。

object.prototype.objcustom = function() {}; 

array.prototype.arrcustom = function() {};

let iterable = [3, 5, 7];

iterable.foo = 'hello';

for (let i in iterable)

for (let i in iterable)

}for (let i of iterable)

for of 與 for in的區別

1 2 3 4 5 6 7 8 array.prototype.method function varmyarray 1,2,4,5,6,7 myarray.name 陣列 for varindexinmyarray 使用for in 也可以遍歷陣列,但是會存在以下問題 1.index索引為字串型數...

for in與for of的區別

1.遍歷物件的可列舉屬性名 enumerable true,通過object.defineproperty obj,prop,descriptor 修改,通過obj.propertyisenumerable prop 進行判斷 2.向上查詢原型鏈中的屬性 如僅想遍歷自身屬性,加一層if,通過haso...

for of 與 for in的區別

遍歷陣列通常使用for迴圈,es5的話也可以使用foreach,es5具有遍歷陣列功能的還有map filter some every reduce reduceright等,只不過他們的返回結果不一樣。但是使用foreach遍歷陣列的話,使用break不能中斷迴圈,使用return也不能返回到外層...