当我们需要对一个对象进行使用for of进行遍历时,这个时候就会出现错误,如下:
let obj = {name:"前端",age:22}
for(let i of obj){
console.log(i);//Uncaught TypeError: obj is not iterable
}
对于这种报错是由于:
js的内置类型并没有实现iterable接口
譬如:String、Array、TypedArray、Map 和 Set,都是可迭代对象。
可迭代对象, 需要具备 Symbol.iterator 和 next 这两个函数,即可用 for…of 进行迭代,
let obj = { name: 1, age: 2 };
Object.prototype[Symbol.iterator] = function () {
let keys = Object.keys(this); //获取对象的key,返回值是数组
let index = 0;
return {
next: () => {
if (index < keys.length) {
return {
done: index > keys.length,
value: this[keys[index++]]
}; //必须写成箭头函数,让this为当前Object的实例
} else {
return { done: true };
}
},
return() {
console.log('遍历被终止了!'); //用于当遍历被break等终止时执行的操作!
return { done: true };
}
};
};
for (let i of obj) {
console.log(i); // 1 2
}