ECMAScript 2015/ES6 中的迭代器、可迭代和 for..of 循环
let tempArray = [1,2,3,4,5];
for(element of tempArray) {
console.log(element);
}
// 1
// 2
// 3
// 4
// 5
但如果我们这样做
let tempObj = {a:1, b:2, c:3};
for(element of tempObj) {
console.log(element);
}
// error
我们得到错误是因为 for..of 循环仅适用于 Iterables,即具有 @@iterator 的对象遵守 Iterator 协议,这意味着它必须有一个带有 next 方法的对象。下一个方法不带参数,它应该返回一个具有这两个属性的对象。
done:当为真时表示序列已经结束,假表示可能有更多的值
值:这是序列中的当前项
因此,要使对象 Iterable 与 for..of 一起工作,我们可以:
1 . 通过 Symbol.iterator 属性为对象分配神秘的 @@iterator 属性,使对象成为 Iterable。以下是如何:
let tempObj = {a:1, b:2, c:3};
tempObj[Symbol.iterator]= () => ({
next: function next () {
return {
done: Object.keys(this).length === 0,
value: Object.keys(this).shift()
}
}
})
for(key in tempObj){
console.log(key)
}
// a
// b
// c
2.使用Object.entries,返回一个Iterable:
let tempObj = {a:1, b:2, c:3};
for(let [key, value] of Object.entries(tempObj)) {
console.log(key, value);
}
// a 1
// b 2
// c 3
3.使用Object.keys,方法如下:
let tempObj = {a:1, b:2, c:3};
for (let key of Object.keys(tempObj)) {
console.log(key);
}
// a
// b
// c
希望对你有帮助!!!!!!