Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 [for...of]
循环使用。
var myIterable = {}
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...myIterable] // [1, 2, 3]
对象的迭代
var people={
name:'test',
sex:'male',
hobbies:['ball','paint','sing'],
[Symbol.iterator]() {
let index = 0
return {
next: () => {
let keys = Object.keys(this)
return index >= keys.length ? {done: true} : {value: this[keys[index++]], done: false}
}
}
}
};
var obj = people[Symbol.iterator]();
obj.next() //{value: 'test', done: false}
obj.next() //{value: 'male', done: false}
obj.next() //{value: Array(3), done: false}
obj.next() // {done: true}
##第二种
var people={
name:'test',
sex:'male',
hobbies:['ball','paint','sing'],
};
function* itertorObj(obj) {
let keys = Object.keys(obj)
for (let key of keys) {
yield [key, obj[key]];
}
}
var obj = itertorObj(people);
obj.next()