javascript - for in

javascript中for in语句可以迭代array,string以及object属性,在迭代object属性是并不能迭代所有对象的所有属性,有些特殊情况下,例如一些对象的属性标示为只读或者不可变的,标示为不可迭代的。这些属性不能被for/in迭代。所有用户自定义属性是可以迭代的,许多内建属性包括所有内建方法是不可以被迭代的。对象是可以继承其他对象的属性的,继承而来的属性是用户自定义属性,是可以用for/in迭代的。

 

值得注意的是对object不能迭代的属性用用户自定义属性覆盖,在firefox,webkit里就可以迭代了,但是在ie里仍然不可以迭代。

 

例如:

for(var key in {valueOf:1}) {

alert(key)

}

 

在ie里弹不出“valueOf”,在firefox,webkit等浏览器里可以

 

所以若使用for in进行对象属性复制,在ie里是不可以复制用户自定义的和不可迭代属性同名的属性例如toString,valueOf,这样的话就需要显示在for in外面复制,代码如下:

 

for IE:

 

function(object, configs) {

        if (object && config && typeof config === 'object') {

            for (var key in config) {

                object[key] = config[key];

            }

            if (config.toString !== Object.prototype.toString) {

                object.toString = config.toString;

            }

            if (config.valueOf !== Object.prototype.valueOf) {

                object.valueOf = config.valueOf;

            }

        }

        return object;

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值