首先我们要明白一个概念,for of能遍历的元素,只要是元素上有迭代器这个属性就可以遍历
比如说 我们的数组
我们的对象上 就没有这个属性, 所以就不能进行 for of遍历循环, 如果想要我们的对象可以用for of循环,那么再对象上 加上这个 迭代器属性就行了
// 这里 要用let 因为下面我们要给属性加上一个 迭代器
let obj = {
0: 1,
1: 2,
2: 3,
length: 3 // 需要给对象上加上 length,因为我们用的是数组的迭代器
};
obj[Symbol.iterator] = Array.prototype[Symbol.iterator];
for(let item of obj) {
console.log(item, "item");
}
通过迭代器的概念 我们就解决了 遍历对象乱序的问题了
同样 我们可以自己修改 数组里面的迭代器方法
let arr = [1, 2, 3, 4, 5];
arr[Symbol.iterator] = function () {
// 这里的this 代表的是这个数组
let self = this,
index = 0;
return {
// 迭代器 必须是要有next方法, 拿到结构中的某个值
// done: false 是迭代器还没有结束循环 done: true 是代表结束循环了
next() {
if(index > self.length -1 ) {
return {
done: true,
value: undefined
};
}
// 这里 我们可以让index + 1
index = index + 2;
return {
done: false,
value: self[index]
};
}
};
}
for(let item of arr) {
console.log(item, "item");
}