for of 與 for in的區別

2021-08-19 22:13:13 字數 2311 閱讀 7035

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索引為字串型數字,不能直接進行幾何運算

2.遍歷順序有可能不是按照實際陣列的內部順序

3.使用for in會遍歷陣列所有的可列舉屬性,包括原型。例如上例中的原型方法method和name屬性

所以for in更適合遍歷物件,不要使用for in遍歷陣列。

那麼除了使用for迴圈,如何更簡單的正確的遍歷陣列達到我們的期望呢(即不遍歷method和name),es6中的for of更勝一籌.

1

2

3

4

5

6

7

8

array.prototype.method=function()

varmyarray=[1,2,4,5,6,7]

myarray.name="陣列";

for(varvalue of myarray)

記住,for in遍歷的是陣列的索引(即鍵名),而for of遍歷的是陣列元素值。

for of遍歷的只是陣列內的元素,而不包括陣列的原型屬性

method和索引name

遍歷物件 通常用for in來遍歷物件的鍵名

1 234

5678

910

11object.prototype.method=function()

varmyobject=

for(varkeyinmyobject)

f

or in 可以遍歷到myobject的原型方法method,如果不想遍歷原型方法和屬性的話,可以在迴圈內部判斷一下,hasownpropery方法可以判斷某屬性是否是該物件的例項屬性

1 234

5for(varkeyinmyobject)

}

同樣可以通過es5的object.keys(myobject)獲取物件的例項屬性組成的陣列,不包括原型方法和屬性。

1 234

5678

9object.prototype.method=function()

varmyobject=

object.keys(myobject).foreach(function(key,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也不能返回到外層...

for of 與 for in的區別

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