WithCoderWithCoderWithCoder

Javascript对象属性检测

    Javascript对象可以看做是属性的集合,在开发时,我们经常会判断某个属性是否存在于某个对象中。

    我们可以使用以下方式进行判断:

    1. 属性查询

    2. hasOwnProperty()方法

    3. propertyIsEnumerable()方法

    4. in运算符

    下面我们对以上几种判断方法做简单的介绍:

    1. 属性查询

    属性查询是一种简便的方法来判断属性是否存在,我们可以使用“!==”判断一个属性是否是undefined来检测属性是否属于对象:   

    <script>
        var o = {
            x: 1
        };

        console.log(o.x !== undefined); // true
        console.log(o.y !== undefined); // false
    </script>

    注意:

    这种判断在大多数情况下是没有问题的,但如果把属性的值设置为undefined(虽然设置一个值为undefined是不合理的),则此种方法就不能正确判断。

    2. hasOwnProperty()方法

    对象的hasOwnProperty()方法用来检测给定名称的属性是否是对象的自有属性。如果属性是对象的自有属性,此方法返回true;对于继承原型的属性,这个方法将返回false。   

    <script>
        var o = {
            x: 1
        };

        console.log(o.hasOwnProperty('x')); // 自有属性,true
        console.log(o.hasOwnProperty('y')); // false
        console.log(o.hasOwnProperty('toString')); //继承属性,false
    </script>

    3. propertyIsEnumerable()方法

    propertyIsEnumerable()方法是hasOwnProperty()方法的增强版,只有检测到属性是对象的自有属性且这个属性的可枚举性(enumerable attribute)为true时它才返回true。一些内置属性是不可枚举的。不过,通常由Javascript代码创建的属性都是可枚举的,除非在ECMAScript 5中使用特殊的方法来改变属性的可枚举性。

    <script>
        var o = {
            x: 1
        };

        console.log(o.propertyIsEnumerable('x')); // 自有可枚举属性,true
        console.log(o.propertyIsEnumerable('y')); // false
        console.log(o.propertyIsEnumerable('toString')); // 继承属性,false
    </script>

    4. in运算符

    hasOwnProperty()和propertyIsEnumerable()方法只能判断属性是否属于自有属性,对于继承而来的属性则无法判断。这时,我们可以使用in运算符进行判断。如果属性是对象的自有属性或者是对象继承自原型的属性,in操作符都可以返回true,即使对于属性值是undefiend的属性,in操作符也返回true。

    in运算符的左侧是字符串表示的属性名,右侧是对象。   

    <script>
        var o = {
            x: 1,
            y: undefined
        };

        console.log('x' in o); // 自有可枚举属性,true
        console.log('toString' in o); // 继承属性,true
        console.log('y' in o); // 属性值是undefined,true
        console.log('z' in o); // 不存在的属性,false
    </script>

    总的来说,如果要判断一个属性是否是对象的自有属性,我们可以使用hasOwnProperty()方法来进行判断;如果要判断一个属性是否属于一个对象(自有或继承),就使用in操作符进行判断。

欢迎分享交流,转载请注明出处:WithCoder » Javascript对象属性检测