|
为了判断一个对象是否包含自定义属性而不是原型链上的属性, 注意: 通过判断一个属性是否 undefined 是不够的。 hasOwnProperty 是 JavaScript 中唯一一个处理属性但是不查找原型链的函数。 // 修改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 可以给出正确和期望的结果,这在遍历对象的属性时会很有用。 hasOwnProperty 作为属性JavaScript 不会保护 hasOwnProperty 被非法占用,因此如果一个对象碰巧存在这个属性, var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
foo.hasOwnProperty('bar'); // 总是返回 false
// 使用其它对象的 hasOwnProperty,并将其上下为设置为foo
{}.hasOwnProperty.call(foo, 'bar'); // true
结论当检查对象上某个属性是否存在时,hasOwnProperty 是唯一可用的方法。 |