hasOwnProperty(prop):
-
返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。
-
prop:要检测的属性的 String 字符串形式表示的名称,或者 Symbol
-
返回值:用来判断某个对象是否含有指定的属性的布尔值 Boolean
-
所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和
in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性 -
即使属性的值是 null 或 undefined,只要属性存在,hasOwnProperty 依旧会返回 true
o = new Object();
o.propOne = null;
o.hasOwnProperty('propOne'); // 返回 true
o.propTwo = undefined;
o.hasOwnProperty('propTwo'); // 返回 true
使用 hasOwnProperty 方法判断属性是否存在,下面的例子检测了对象 o 是否含有自身属性 prop:
o = new Object();
o.hasOwnProperty('prop'); // 返回 false
o.prop = 'exists';
o.hasOwnProperty('prop'); // 返回 true
delete o.prop;
o.hasOwnProperty('prop'); // 返回 false
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