我先說明一下,for...of在es6之前是沒有的,之前都是採用for,forEach,for...in 來循環
而for...of的出現,主要取決於Map,Set等新數據結構的出現,使得官方打算推出一種統一的訪問機制。
而想要使用for...of,必須部署Symbol.iterator接口,這是官方的定義。
- Array
- Map
- Set
- String
- TypedArray
- 函數的 arguments 對象
- NodeList 對象
本身就有隱式的Symbol.iterator接口,所以無需部署
而像obj對象,我們可以自己靈活的定義Symbol.iterator接口
let obj = {
arr: [1, 2, 3],
[Symbol.iterator]: function () {
var self = this
var i = 0
return {
next: function () {
var done = i >= self.arr.length
return {
value: !done ? self.arr[i++] : undefined,
done: done //done默認爲false 爲false說明有下一個
}
}
}
}
}
for (let key of obj) {
console.log(key) //1 2 3
}