ES6-Symbol.iterator 迭代器
一个数据结构只要部署了Symbol.iterator属性就能使用 for...of遍历 与 ...运算符 操作
Object身上没有Symbol.iterator,当直接使用时会报错
let obj = { 0: 'a', 1: 'b', 2: 'c', } console.log([...obj])//报错obj is not iterable
在没有Symbol.iterator方法下运行
let obj = { 0: 'a', 1: 'b', 2: 'c', } for(let p of obj){ console.log(p);//TypeError: obj is not iterable }
Array身上天生具备Symbol.iterator
let arr = [1,2,3,4]; console.log([...arr]);//(4) [1, 2, 3, 4] 数组,天生具备Symbol.iterator方法所以可以使用
而我们Object需要用到...运算符 与 for of遍历怎么办呢
如果我们要使用它的话,Object身上需要有一个Symbol.iterator属性代码如下:
let obj = { 0: 'a', 1: 'b', 2: 'c', length: 3, [Symbol.iterator]: function () { // index用来记遍历圈数 let index = 0; let next = () => { return { value: this[index], done: this.length == ++index } } return { next } } } // console.log(obj.length) console.log([...obj]);//(2) ["a", "b"] for(let p of obj){ console.log(p) //"a" "b" }