Object.prototype.hasOwnProperty()


hasOwnProperty() 方法會返回一個布爾值,指示對象自身屬性中是否具有指定的屬性
obj.hasOwnProperty(prop)
prop
要檢測的屬性 字符串 名稱或者 Symbol。
 
返回判斷對象是否有指定的屬性的布爾值
 
所有繼承了 Object 的對象都會繼承到 hasOwnProperty 方法。這個方法可以用來檢測一個對象是否含有特定的自身屬性; 和 in 運算符不同,該方法會忽略掉那些從原型鏈上繼承到的屬性
o = new Object();
o.prop = 'exists';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');   // 返回 true
changeO();
o.hasOwnProperty('prop');   // 返回 false
自身屬性與繼承屬性
o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop');             // 返回 true
o.hasOwnProperty('toString');         // 返回 false
o.hasOwnProperty('hasOwnProperty');   // 返回 false
遍歷一個對象的所有自身屬性
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
    }
}
使用 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM