//for ...in 以原始插入的順序迭代對(duì)象的可迭代屬性
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? 根據(jù)迭代對(duì)象的迭代器具體實(shí)現(xiàn)迭代對(duì)象數(shù)據(jù)
? 迭代器:具體的迭代實(shí)現(xiàn)邏輯
? 迭代對(duì)象:可被迭代的對(duì)象——[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)//報(bào)錯(cuò),因?yàn)檫@里obj沒(méi)有[Symbol.iterator] 方法
}
自定義迭代器
var obj = {
? ? name:'ldm',
? ? age:20
}
obj[Symbol.iterator] = function(){
? let keys = Object.keys(obj)//返回值是一個(gè)數(shù)組[]
? 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)//報(bào)錯(cuò),因?yàn)檫@里obj沒(méi)有[Symbol.interator] 方法
}