Object.prototype.hasOwnProperty()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
hasOwnProperty()
回傳物件是否有該屬性的布林值。
表達式
js
obj.hasOwnProperty(prop)
參數
prop
-
屬性名稱。
說明
範例
使用 hasOwnProperty
測試屬性是否存在
這個範例顯示 o
物件是否擁有名為 prop
的屬性:
js
o = new Object();
o.prop = "exists";
function changeO() {
o.newprop = o.prop;
delete o.prop;
}
o.hasOwnProperty("prop"); // 回傳 true
changeO();
o.hasOwnProperty("prop"); // 回傳 false
直接與繼承的屬性
這個範例區分直接屬性和從原型鍊繼承的屬性:
js
o = new Object();
o.prop = "exists";
o.hasOwnProperty("prop"); // 回傳 true
o.hasOwnProperty("toString"); // 回傳 false
o.hasOwnProperty("hasOwnProperty"); // 回傳 false
遍歷物件的屬性
這個範例顯示如何不執行繼承的屬性去遍歷物件的屬性。注意 for...in
已經遍歷了可以被列舉的項目,所以不該基於缺乏不可列舉的屬性(如下)而假設 hasOwnProperty
被嚴格地限制在列舉的項目(如同 Object.getOwnPropertyNames()
)。
js
var buz = {
fog: "stack",
};
for (var name in buz) {
if (buz.hasOwnProperty(name)) {
console.log("this is fog (" + name + ") for sure. Value: " + buz[name]);
} else {
console.log(name); // toString or something else
}
}
將 hasOwnProperty
作為屬性
JavaScript 並未保護 hasOwnProperty
;因此,如果一個物件擁有一樣的屬性名稱,為了獲得正確的結果需要使用 external hasOwnProperty
:
js
var foo = {
hasOwnProperty: function () {
return false;
},
bar: "Here be dragons",
};
foo.hasOwnProperty("bar"); // 總是回傳 false
// 使用其他物件的 hasOwnProperty 和 call it with 'this' set to foo
({}).hasOwnProperty.call(foo, "bar"); // true
// 從物件的原型使用 hasOwnProperty 也是可行的
Object.prototype.hasOwnProperty.call(foo, "bar"); // true
註:在最後一個例子中並未創建任何新的物件。
規範
Specification |
---|
ECMAScript Language Specification # sec-object.prototype.hasownproperty |
瀏覽器相容性
BCD tables only load in the browser