for of, for in, forEach比較

forEach

forEach沒法中途跳出forEach循環,break、continue和return都不奏效。數據結構

for in

for...in 循環只遍歷可枚舉屬性。
像 Array和 Object使用內置構造函數所建立的對象都會繼承自Object.prototype和String.prototype的不可枚舉屬性,例如 String 的 indexOf() 方法或 Object的toString()方法。函數

循環將遍歷對象自己的全部可枚舉屬性,以及對象從其構造函數原型中繼承的屬性(更接近原型鏈中對象的屬性覆蓋原型屬性)。prototype

for...in不該該用於迭代一個 Array,其中索引順序很重要。

for in 循環的輸出順序問題
先遍歷出整數屬性(integer properties,按照升序),而後其餘屬性按照建立時候的順序遍歷出來。code

var obj = {
  a:1,
  '2':1,
  '1':1,
  d:1,
  c:1,
  '3':1
}
obj.b=66;

for (var key in obj) { console.log(key ); }    //"1", "2", "3", "a", "d", "c", "b"
Object.keys(obj);                              //["1", "2", "3", "a", "d", "c", "b"]
Object.keys()和for in 具備相同的排列順序

for of

有着同for...in同樣的簡潔語法,可是沒有for...in那些缺點。
不一樣於forEach方法,它能夠與break、continue和return配合使用。
提供了遍歷全部數據結構的統一操做接口。對象

遍歷對象時,推薦使用for in,使用for of會報錯
相關文章
相關標籤/搜索