for of 與 for in的區別

2021-09-09 02:15:49 字數 2696 閱讀 6696

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

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

2

3

4

5

6

7

8

9

10

11

object.prototype.method=function()

varmyobject=

for(varkeyinmyobject)

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

2

3

4

5

for(varkeyinmyobject)

}

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

1

2

3

4

5

6

7

8

9

object.prototype.method=function()

varmyobject=

object.keys(myobject).foreach(function(key,index))

參考文章:

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也不能返回到外層...