返回
正本清源:彻底弄清JS中的可迭代与类数组对象
前端
2023-12-16 04:36:19
可迭代对象
可迭代对象是指可以被迭代(循环)的对象。换句话说,我们可以使用 for...of
循环来遍历它的元素。
const iterable = [1, 2, 3];
for (const element of iterable) {
console.log(element); // 输出:1 2 3
}
可迭代对象不仅限于数组,它还可以是字符串、Set、Map 等。
const iterable = 'hello';
for (const char of iterable) {
console.log(char); // 输出:h e l l o
}
const iterable = new Set([1, 2, 3]);
for (const element of iterable) {
console.log(element); // 输出:1 2 3
}
const iterable = new Map([['a', 1], ['b', 2], ['c', 3]]);
for (const [key, value] of iterable) {
console.log(key, value); // 输出:a 1 b 2 c 3
}
类数组对象
类数组对象是指拥有类似数组的属性和方法的对象。例如,它们拥有 length
属性和 []
运算符,可以用来访问元素。
const arrayLike = {
0: 'a',
1: 'b',
2: 'c',
length: 3
};
console.log(arrayLike.length); // 输出:3
console.log(arrayLike[0]); // 输出:a
但是,类数组对象并不是真正的数组。它们没有 forEach()
、map()
等数组方法,也不能直接使用 for...of
循环进行迭代。
如何判断一个对象是否可迭代?
我们可以使用 Symbol.iterator
来判断一个对象是否可迭代。
const isIterable = (obj) => {
return Symbol.iterator in obj;
};
如果 Symbol.iterator
属性存在于对象上,则该对象是可迭代的。
总结
可迭代对象是指可以被迭代(循环)的对象。类数组对象是指拥有类似数组的属性和方法的对象,但并不是真正的数组。我们可以使用 Symbol.iterator
来判断一个对象是否可迭代。