es5的話也可以使用foreach,es5具有遍歷陣列功能的還有map、filter、some、every、reduce、reduceright等,只不過他們的返回結果不一樣。但是使用foreach遍歷陣列的話,使用break不能中斷迴圈,使用return也不能返回到外層函式。
array.prototype.
method
=function()
var myarray=[1
,2,4
,5,6
,7];
myarray.name=
"陣列"
;for
(var index in myarray)
1.index索引為字串型數字,不能直接進行幾何運算
2.遍歷順序有可能不是按照實際陣列的內部順序
3.使用for in會遍歷陣列所有的可列舉屬性,包括原型。例如上栗的原型方法method和name屬性
所以for in更適合遍歷物件,不要使用for in遍歷陣列。
那麼除了使用for迴圈,如何更簡單的正確的遍歷陣列達到我們的期望呢(即不遍歷method和name),es6中的for of更勝一籌.
array.prototype.
method
=function()
var myarray=[1
,2,4
,5,6
,7]myarray.name=
"陣列"
;for
(var value of myarray)
記住,for in遍歷的是陣列的索引(即鍵名),而for of遍歷的是陣列元素值。
for of遍歷的只是陣列內的元素,而不包括陣列的原型屬性method和索引name
遍歷物件 通常用for in來遍歷物件的鍵名
object.prototype.
method
=function()
var myobject=
for(
var key in myobject)
for in 可以遍歷到myobject的原型方法method,如果不想遍歷原型方法和屬性的話,可以在迴圈內部判斷一下,hasownpropery方法可以判斷某屬性是否是該物件的例項屬性
for
(var key in myobject)
}
同樣可以通過es5的object.keys(myobject)獲取物件的例項屬性組成的陣列,不包括原型方法和屬性
object.prototype.
method
=function()
var myobject=
console.
log(object.
keys
(myobject)
);
for…of適用遍歷數/陣列物件/字串/map/set等擁有迭代器物件的集合.但是不能遍歷物件,因為沒有迭代器物件.與foreach()不同的是,它可以正確響應break、continue和return語句
for…of迴圈不支援普通物件,但如果你想迭代乙個物件的屬性,你可以用for…in迴圈(這也是它的本職工作)或內建的object.keys()方法:
for
(var key of object.
keys
(someobject)
)
遍歷map物件時適合用解構,例如;
for
(var
[key, value]
of phonebookmap)
為物件新增myobject.tostring()方法後,就可以將物件轉化為字串,同樣地,當你向任意物件新增myobjectsymbol.iterator方法,就可以遍歷這個物件了。
舉個例子,假設你正在使用jquery,儘管你非常鍾情於裡面的.each()方法,但你還是想讓jquery物件也支援for-of迴圈,你可以這樣做:
jquery.prototype[symbol.iterator]
= array.prototype[symbol.iterator]
;
所有擁有symbol.iterator的物件被稱為可迭代的。在接下來的文章中你會發現,可迭代物件的概念幾乎貫穿於整門語言之中,不僅是for-of迴圈,還有map和set建構函式、解構賦值,以及新的展開操作符。
for…of的步驟
for-of迴圈首先呼叫集合的symbol.iterator方法,緊接著返回乙個新的迭代器物件。迭代器物件可以是任意具有.next()方法的物件;for-of迴圈將重複呼叫這個方法,每次迴圈呼叫一次。舉個例子,這段**是我能想出來的最簡單的迭代器:
var zeroesforeveriterator =
, next:
function()
;}};
for of 和 for in 的區別
var obj for var key of obj 出錯 uncaught typeerror obj is not iterablevar obj for var key in obj 結果是 a b cvar arr 3 5,7 for var i in arr 結果是 0 1 2var ar...
for in 和for of 的區別
最近在學習es6的知識,看到了for of 這新的迴圈方法,所以就測試一下和以前for in有什麼不同,一下是一些不同地方,當然還有其他不同的,暫時還沒有發現 for in迴圈由於歷史遺留問題,它遍歷的實際上是物件的屬性名稱。乙個array陣列實際上也是乙個物件,它的每個元素的索引被視為乙個屬性。當...
for in 和 for of 的區別
迴圈型別 獲取鍵值 獲取鍵名 可以遍歷物件 for in 否是 是for of 是否 否let arr red blue yellow 使用for in 遍歷 for let item in arr 0,1,2使用for of 遍歷 for let item of arr red,blue,yell...