美文网首页
【object】hasOwnProperty( )

【object】hasOwnProperty( )

作者: dev7 | 来源:发表于2018-07-05 15:02 被阅读0次

    object.hasOwnProperty(prop) 方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。

    食用方法

    1. 使用 hasOwnProperty 方法判断属性是否存在
    下面的例子检测了对象 o 是否含有自身属性 prop:
    
    o = new Object();
    o.prop = 'exists';
    
    function changeO() {
      o.newprop = o.prop;
      delete o.prop;
    }
    
    o.hasOwnProperty('prop');   // 返回 true
    changeO();
    o.hasOwnProperty('prop');   // 返回 false
    
    2. 自身属性与继承属性
    下面的例子演示了 hasOwnProperty 方法对待自身属性和继承属性的区别:
    
    o = new Object();
    o.prop = 'exists';
    o.hasOwnProperty('prop');             // 返回 true
    o.hasOwnProperty('toString');         // 返回 false
    o.hasOwnProperty('hasOwnProperty');   // 返回 false
    
    3. 遍历一个对象的所有自身属性
    在看开源项目的过程中,经常会看到类似如下的源码。for...in循环对象的所有枚举属性,
    然后再使用hasOwnProperty()方法来忽略继承属性。
    
    var buz = {
        fog: 'stack'
    };
    
    for (var name in buz) {
        if (buz.hasOwnProperty(name)) {
            alert("this is fog (" + name + ") for sure. Value: " + buz[name]);
        }
        else {
            alert(name); // toString or something else
        }
    }
    
    4. 使用 hasOwnProperty 作为属性名
    JavaScript 并没有保护 hasOwnProperty 属性名,因此某个对象是有可能存在使用这个属性名
    的属性,使用外部的 hasOwnProperty 获得正确的结果是需要的:
    
    var foo = {
        hasOwnProperty: function() {
            return false;
        },
        bar: 'Here be dragons'
    };
    
    foo.hasOwnProperty('bar'); // 始终返回 false
    
    // 如果担心这种情况,可以直接使用原型链上真正的 hasOwnProperty 方法
    ({}).hasOwnProperty.call(foo, 'bar'); // true
    
    // 也可以使用 Object 原型上的 hasOwnProperty 属性
    Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
    

    相关文章

      网友评论

          本文标题:【object】hasOwnProperty( )

          本文链接:https://www.haomeiwen.com/subject/elkpuftx.html