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
相關文章
相關標籤/搜索