fakeArray 是一个类数组我们把它赋能为数组 可以利用数组的方法来实现快捷的操作
比如可以使用 1 for of
特性 | for...of |
for...in |
---|---|---|
遍历内容 | 可迭代对象的值 | 对象的可枚举属性(包括原型链上的) |
适用对象 | 数组、字符串、Map、Set 等可迭代对象 | 普通对象 |
顺序保证 | 按迭代器定义的顺序 | 不保证顺序(依赖于 JavaScript 引擎) |
原型链属性 | 不遍历 | 会遍历 |
2 [...arr] 方式赋值
方法1
js
const fakeArray = { 0: 'a', 1: 'b', length: 2 };
fakeArray[Symbol.iterator] = function () {
return Array.prototype.values.call(this);
}
console.log([...fakeArray]); // ['a', 'b']
方法2
js
const fakeArray = { 0: 'a', 1: 'b', length: 2 };
fakeArray[Symbol.iterator] = function (){
let idx = 0;
return { // 迭代器,每次迭代的时候调用的方法
next:()=>{
return {value:this[idx],done:idx++ === this.length}
}
}
}
console.log([...fakeArray]); // ['a', 'b']
方法3
js
const fakeArray = { 0: 'a', 1: 'b', length: 2 };
fakeArray[Symbol.iterator] = function* () {
for (let i = 0; i < this.length; i++) {
yield this[i];
}
}
console.log([...fakeArray]); // ['a', 'b']