Object的原型没有实现Symbol.iterator所以不算做可迭代对象。

发布时间 2023-11-15 23:53:12作者: 龙陌

以下哪些对象是Javascript内置的可迭代对象?

A
Array

B
Map

C
String

D
Object

正确答案:ABC

ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。

原生具备 Iterator 接口的数据结构如下。

Array      
Map      
Set      
String      
TypedArray      
函数的 arguments 对象      
NodeList 对象     

JavaScript的可迭代对象
1)数组Arrays

console.log([][Symbol.iterator])

for(let x of ['a','b'])
console.log(x)

2)字符串Strings
console.log(""[Symbol.iterator])
for(let x of "abc")
console.log(x)

3)Map
let map = new Map().set('a', 1).set('b', 2);
console.log(map[Symbol.iterator]);
for (let pair of map) {
console.log(pair);
}

4)Set
let set = new Set().add('a').add('b');
for (let x of set) {
console.log(x);
}

5)arguments
function printArgs() {
for (let x of arguments) {
console.log(x);
}
}
printArgs('a', 'b');

6)Typed Arrays

7)Generators,ES6新增加

js内置的可迭代对象:
Array,Map,Set,String,TypedArray,函数的 arguments 对象,NodeList 对象。

Object的原型没有实现Symbol.iterator所以不算做可迭代对象。
Object的属性是没有先后顺序的,要开发者自己指定遍历顺序,这是没有内置Iterator的原因之一。
另外就是es6的map已经满足了需要迭代Object的场景,不需要再给Object实现该方法。