1. 程式人生 > >ES6中for…of與for…in的區別

ES6中for…of與for…in的區別

都是迴圈,二者的區別在哪
參考:http://es6.ruanyifeng.com/#docs/iterator
1. for…of迴圈可以代替陣列例項的forEach方法,不同於forEach方法,它可以與break、continue和return配合使用。
2. for…in迴圈主要是為遍歷物件而設計的,不適用於遍歷陣列。
3. JavaScript 原有的for…in迴圈,只能獲得物件的鍵名,不能直接獲取鍵值。ES6 提供for…of迴圈,允許遍歷獲得鍵值。
4. for…of迴圈呼叫遍歷器介面,陣列的遍歷器介面只返回具有數字索引的屬性。這一點跟for…in迴圈也不一樣。
5. 對於普通的物件,for…of結構不能直接使用,會報錯,必須部署了 Iterator 介面後才能使用。但是,這樣情況下,for…in迴圈依然可以用來遍歷鍵名。對於字串來說,for…of迴圈還有一個特點,就是會正確識別 32 位 UTF-16 字元。for…of迴圈可用於字串、DOM NodeList 物件、arguments物件。
6. 並不是所有類似陣列的物件都具有 Iterator 介面,一個簡便的解決方法,就是使用Array.from方法將其轉為陣列。
7. 對於普通的物件,for…in迴圈可以遍歷鍵名,for…of迴圈會報錯。
8. 一種解決方法是,使用Object.keys方法將物件的鍵名生成一個數組,然後遍歷這個陣列。
9. 另一個方法是使用 Generator 函式將物件重新包裝一下。