以下哪些对象是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实现该方法。