js中遍历为什么__proto__中的属性不能遍历出来

我们使用Object构造函数创造一个对象,它会继承Object.prototype的属性,但我们遍历整个对象的时候并不会输出继承的属性。

  var obj = new Object();
        obj.name = "terry";
        obj.age = 12;
        for(var k in obj){
            console.log(k,obj[k]);
        }
        console.log(obj)
         console.log(obj.constructor)

在这里插入图片描述
执行上面代码,发现对象obj具有__proto__,并且可以访问其中的属性(obj.constructor),但在遍历的时候并没有出现。
那是因为你通过自己添加的属性默认是可迭代的。而__proto__中的属性是不可迭代的。
其实我们自己在定义属性的时候可以将它设置为不可迭代的,将它隐藏起来。

var obj = new Object();
    obj.name = "terry";     // 默认就是可以迭代的

    Object.defineProperty(obj,"age",{
      configurable:true,  // 是否可配置
      enumerable:false,   // 是否可迭代
      writable:false,     // 是否可写
      value:"12"       // 默认值
    })

通过Object.defineProperty()设置属性后可以将该属性设置为不可迭代,主要遍历的时候就不会输出了。还可以设置是否可写,如果设置为false,那么属性值就不会被改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值