廢話不多說蛹疯,先上表格對比戒财。
方法 | 可遍歷對象 | ES | index OR key的類型 | 自定義屬性 | 原型鏈上的自定義屬性 |
---|---|---|---|---|---|
for | 數組、字符串 | - | number | 不可遍歷 | 不可遍歷 |
for in | 數組捺弦、字符串饮寞、對象 | ES5 | string | 可遍歷 | 可遍歷 |
for of | 數組、字符串 | ES6 | - | 不可遍歷 | 不可遍歷 |
forEach | 數組 | ES5 | number | 不可遍歷 | 不可遍歷 |
map | 數組 | ES5 | number | 不可遍歷 | 不可遍歷 |
for in 遍歷列吼,根據key遍歷
根據屬性名遍歷所以key的類型是string幽崩,遍歷順序也可能不是實際數組的順序。
遍歷數組時如果給數組增加了自定義屬性寞钥,也會把自定義屬性遍歷出來慌申,所以for in更適合遍歷對象。
如果對象原型上和原型鏈的對象原型上有自定義屬性都會遍歷出來理郑,當不想遍歷原型鏈的屬性時可已使用hasOwnProperty過濾蹄溉。注意:hasOwnProperty過濾的是自身以外的屬性for (const key in arr) { if (arr.hasOwnProperty(key)) { // 這樣就可以過濾掉原型鏈上的可枚舉屬性了 console.log(key, arr[key]); } }
for of 遍歷, 根據值遍歷
用來彌補for in在遍歷時不能根據值遍歷的不足您炉。
由于是ES6柒爵,兼容性非常不好。
for (const iterator of obj) { console.log(iterator); }
forEach 遍歷赚爵,根據index遍歷
和for項目forEach除了寫法沒有任何優(yōu)勢棉胀。
forEach遍歷是從頭到尾遍歷,沒有中途跳出的方法冀膝,如:for遍歷 的break
唁奢。
想能上 for>forEach。
arr.forEach((val, i, arr) => { console.log(val); });
map 遍歷窝剖,根據index遍歷
和forEach相比麻掸,map可以返回一個新數組,新數組的內容是回調函數的返回值枯芬。
可以用來克隆數組论笔。
arr.map((val, i, arr) => { return val * 2; });
本文內容未經過校驗,如有錯誤歡迎指出千所。
歡迎轉載狂魔,但請注明出處。
http://www.reibang.com/p/e8e04e33fa4d