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
相关文章
相关标签/搜索