Symbol.iterator介绍
MDN上定义**Symbol.iterator **为每一个对象定义了默认的迭代器。该迭代器可以被 `[for...of](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of)` 循环使用。
个人理解就是一个迭代器一个可遍历的方法,JS中数组中的数组成员都是有顺序的,例如下标,而对象就就没有。使用iterator接口就可以实现
- 1
let obj = {
data: ["1", "2", "3"],
[Symbol.iterator]() {
const self = this;
let index = 0;
return {
next() {
if (index < self.data.length) {
return {
value: self.data[index++],
done: false,
};
} else {
return { value: undefined, done: true };
}
},
};
},
};
for (let i of obj) {
console.log(i); // 1 2 3
}
- 2
let obj = {
name: "Cola",
age: 19,
};
obj[Symbol.iterator] = function* fun() {
yield 1;
yield 2;
yield 3;
};
console.log(obj);
for (let i of obj) {
console.log(i); // 1 2 3
}