let arr = [1,2,3]
for(let i of arr){
console.log(i)
}
//for ... of内部的实现
try{
//将可遍历对象转换为遍历器
let iter = arr[Symbol.iterator]()
let i = ''
while(i != undefined){
i = iter.next().value
console.log(i)
}
}catch(e){
console.log(e)
}
原生javascript中有[Symbol.iterator]接口的:
Array、arguments、NodeList、string、set、map、TypedArray
手写[Symbol.iterator]接口
Object.prototype[Symbol.iterator] = function(){
let self = this
let index = 0
let keys = Object.keys(this)
return {
next(){
if(index<keys.length){
return {
value:self[keys[index++]],
done:false
}
}else{
return {
value:undefined,
done:true
}
}
}
}
}
let obj = {
name:'wl',
age:23,
job:'stu',
size:18
}
for(let i of obj){
console.log(i)
}