for…of與for…in的差別
總結
- 建議:在迭代物件屬性時,使用
for...in;在迭代陣列時,使用for...of。 for...in輸出的是屬性名稱(key),for...of輸出的是值(value)for...of是 ES6 的新語法。修復了ES5 for…in 的不足for...of不能迭代物件,需要透過和 Object.keys() 搭配使用
範例說明
參考下列三個範例變化與說明,即可了解 for...of 與 for...in 之間的差別
範例1
單純迭代陣列的話,for...in 輸出的是屬性名稱(key),for...of 輸出的是值(value)
1 | let iterable = [3, 5, 7]; |
範例2
再來我們在原本的陣列,新增一個屬性 foo,可看到 for...in 有將此屬性 foo 也輸出。
1 | let iterable = [3, 5, 7]; |
範例3
再來我們這次在物件和陣列的原型鍊上,分別各新增function,一樣可看到 for...in 也將原型鋉上的function名稱也輸出了。
1 | // 在 原型鍊上 新增function |
由上面三個案例來看,如果只是想單純的迭代取出陣列值的話,建議使用 for...of 會比較好,不過注意此語法為 ES6 新語法。
for..of 迭代 物件(object)
如果想用 for...of 來遍歷物件的屬性的話,可以通過和 Object.keys() 搭配使用,先取得物件的所有key的數組,然後再遍歷。
1 | var student={ |
