为了账号安全,请及时绑定邮箱和手机立即绑定

问一个关于for...in循环对象内部属性的问题

问一个关于for...in循环对象内部属性的问题

阿里斯托亚 2017-08-20 13:18:56
function abc(a){     for(var i in a){         if(typeof a[i] === 'object'){             alert(a[i])             abc(a[i]);         }else{             alert(a[i])         }     } }; var dx = {     arr:[1,2,3],     sz:['a','b','c'],     dd:{popo:1},     xx:true }; abc(dx); for...in循环第一遍的时候,a[i]表示的是dx对象的arr属性,当第2次、第3次、第4次for..in的时候循环的时候a已经是属性arr了,但是当arr的值循环完之后为什么for..in不停下,还接着循环sz、dd与xx,a是怎么成为sz或dd或xx的
查看完整描述

3 回答

已采纳
?
啊啊啊啊123

TA贡献25条经验 获得超8个赞

因为typeof 数组 也是object

查看完整回答
反对 回复 2017-08-20
  • 阿里斯托亚
    阿里斯托亚
    ??? 我问的是arr属性循环完之后为什么还继续sz属性
  • 啊啊啊啊123
    啊啊啊啊123
    因为for in啊,遍历dx里的所有属性
  • 阿里斯托亚
    阿里斯托亚
    我知道遍历所有属性 但是我这个例子中for...in便利第二遍的时候 for(var i in a)括号里的a已经是arr属性了 我问的是arr属性的值被遍历完了之后为何for(var i in a)还继续遍历别的属性 因为a这时已经不是对象了 而是对象的arr属性
点击展开后面14
?
Kingziqiang

TA贡献5条经验 获得超2个赞

i 是对象的属性,a[i]是对象的值;一般写for in 迭代时用for( var key in obj){};这样更语义化


查看完整回答
1 反对 回复 2017-08-20
?
Jaydon_

TA贡献26条经验 获得超10个赞

for in 循环可以遍历对象的所有hasownProperty属性..你通过函数把对象传了过去

查看完整回答
反对 回复 2017-08-20
  • 阿里斯托亚
    阿里斯托亚
    但再次调用for内部的函数时 参数a不就是对象的第一个属性arr吗 然后为啥这个属性的值遍历完之后还接着遍历对象的其他属性呢 因为此时a已经不是dx对象了 而是对象的arr属性 这个属性的值遍历完之后不应该停止for...in吗 为啥还接着遍历不属于这个arr属性值的sz属性
  • Jaydon_
    Jaydon_
    这是递归啊。。。
  • 阿里斯托亚
    阿里斯托亚
    递归只递归一次 从第二次之后不就不递归了吗
点击展开后面2
  • 3 回答
  • 0 关注
  • 1917 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信