//for ...in 以原始插入的顺序迭代对象的可迭代属性
let arr = [1,2,3];
var obj = {
name:'ldm',
age:20
}
// for (var key in arr){
// console.log(key)//0,1,2
// console.log(arr[key])//1,2,3
// }
for(var key in obj){
console.log(key)//name,age
console.log(obj[key])//'ldm',20
}
二、for...of 根据迭代对象的迭代器具体实现迭代对象数据
迭代器:具体的迭代实现逻辑
迭代对象:可被迭代的对象——[Symbol.iterator] 方法
for(var key of arr){
console.log(key)//1,2,3----这里的key是arr的值
}
var obj = {
name:'ldm',
age:20
}
for(var key of obj){
console.log(key)//报错,因为这里obj没有[Symbol.iterator] 方法
}
自定义迭代器
var obj = {
name:'ldm',
age:20
}
obj[Symbol.iterator] = function(){
let keys = Object.keys(obj)//返回值是一个数组[]
let len = keys.length;
console.log(keys)
let n = 0;
return{
next(){
if(n<len){
return {
value:keys[n++],//obj的key的值
done:false,//为true则不再迭代
}
}else{
return {
value:'',
done:true,
}
}
}
}
}
for(var key of obj){
console.log(key)//报错,因为这里obj没有[Symbol.interator] 方法
}