javascript - for in

    技术2025-12-31  1

    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)