可迭代对象
实现了 Iterator 接口的数据结构,即部署了 Symbol.Iterator 对象
遍历
-
while循环
/** ITERABLE代表某种可遍历的数据结构,$iterator是它的遍历器对象。 遍历器对象每次移动指针(next方法),都检查一下返回值的done属性,如果遍历还没结束,就移动遍历器对象的指针到下一步(next方法),不断循环 */ var $iterator = ITERABLE[Symbol.iterator](); var $result = $iterator.next(); while (!$result.done) { var x = $result.value; // ... $result = $iterator.next(); } -
for...of
转化为数组
-
扩展运算符
扩展运算符(
...)内部使用for...of循环,所以可以用于可迭代对象let set = new Set().add('a').add('b').add('c'); ['a', ...set, 'd'] // ["a", "a", "b", "c", "d"] let map = new Map().set('a', 1).set('b', 2); [...map] // [["a", 0], ["b", 1]] -
Array.from()
将一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例
let set = new Set().add('a').add('b').add('c'); Array.from(set) // ["a", "b", "c"] let map = new Map().set('a', 1).set('b', 2); Arrary.from(map) // [["a", 0], [b", 1]]
类数组
存在数值键名和
length属性
遍历
转化为数组
-
Array.from(arrLike)
-
数组的
slice方法 +call/applylet arrLike = { 0: 'a', 1: 'b', 2: 'c', length: 3 }; // call 改变this的指向 Array.prototype.slice.call(arrLike) arrLike // ["a", "b", "c"] // 或者 [].slice.call(arrLike) arrLike // ["a", "b", "c"]