ES6-Symbol.iterator 迭代器
一个数据结构只要部署了Symbol.iterator属性就能使用 for...of遍历 与 ...运算符 操作
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
Object身上没有Symbol.iterator,当直接使用时会报错
let obj = {
0: 'a',
1: 'b',
2: 'c',
}
console.log([...obj])//报错obj is not iterable
在没有Symbol.iterator方法下运行
let obj = {
0: 'a',
1: 'b',
2: 'c',
}
for(let p of obj){
console.log(p);//TypeError: obj is not iterable
}
Array身上天生具备Symbol.iterator
let arr = [1,2,3,4];
console.log([...arr]);//(4) [1, 2, 3, 4]
数组,天生具备Symbol.iterator方法所以可以使用
而我们Object需要用到...运算符 与 for of遍历怎么办呢
如果我们要使用它的话,Object身上需要有一个Symbol.iterator属性代码如下:
let obj = {
0: 'a',
1: 'b',
2: 'c',
length: 3,
[Symbol.iterator]: function () {
// index用来记遍历圈数
let index = 0;
let next = () => {
return {
value: this[index],
done: this.length == ++index
}
}
return {
next
}
}
}
// console.log(obj.length)
console.log([...obj]);//(2) ["a", "b"]
for(let p of obj){
console.log(p) //"a" "b"
}
更多精彩

