在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ hasOwnProperty 函數(shù)
arguments 對象
類型轉(zhuǎn)換
構(gòu)造函數(shù)
instanceof 操作符
自動分號插入
為什么不要使用 eval
對象使用和屬性
作用域與命名空間
this 的工作原理
typeof 操作符
相等與比較
閉包和引用
數(shù)組遍歷與屬性
Array 構(gòu)造函數(shù)
原型
hasOwnProperty 函數(shù)
undefined 和 null
函數(shù)聲明與表達式
setTimeout 和 setInterval
for in 循環(huán)

hasOwnProperty 函數(shù)

為了判斷一個對象是否包含自定義屬性而不是原型鏈上的屬性, 我們需要使用繼承自 Object.prototypehasOwnProperty 方法。

注意: 通過判斷一個屬性是否 undefined不夠的。 因為一個屬性可能確實存在,只不過它的值被設(shè)置為 undefined。

hasOwnProperty 是 JavaScript 中唯一一個處理屬性但是查找原型鏈的函數(shù)。

    // 修改Object.prototype
    Object.prototype.bar = 1; 
    var foo = {goo: undefined};

    foo.bar; // 1
    'bar' in foo; // true

    foo.hasOwnProperty('bar'); // false
    foo.hasOwnProperty('goo'); // true

只有 hasOwnProperty 可以給出正確和期望的結(jié)果,這在遍歷對象的屬性時會很有用。 沒有其它方法可以用來排除原型鏈上的屬性,而不是定義在對象自身上的屬性。

hasOwnProperty 作為屬性

JavaScript 不會保護 hasOwnProperty 被非法占用,因此如果一個對象碰巧存在這個屬性, 就需要使用外部hasOwnProperty 函數(shù)來獲取正確的結(jié)果。

    var foo = {
        hasOwnProperty: function() {
            return false;
        },
        bar: 'Here be dragons'
    };

    foo.hasOwnProperty('bar'); // 總是返回 false

    // 使用其它對象的 hasOwnProperty,并將其上下文設(shè)置為foo
    ({}).hasOwnProperty.call(foo, 'bar'); // true

結(jié)論

當(dāng)檢查對象上某個屬性是否存在時,hasOwnProperty唯一可用的方法。 同時在使用 for in loop 遍歷對象時,推薦總是使用 hasOwnProperty 方法, 這將會避免原型對象擴展帶來的干擾。

上一篇:this 的工作原理下一篇:原型