一句話概括: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也不能返回到外層...