Object.prototype.hasOwnProperty()
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键),判断属性是否为自定义,不是从原型链上继承的关系。
所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性
列子(自身属性和继承属性):
let obj = new Object()
obj.prop = test
obj.hasOwnProperty('prop') // true prop为自定义属性
obj.hasOwnProperty('toString') // false toString为继承的属性
obj.hasOwnProperty('valueOf') // false valueoF为继承的属性
hasOwnProperty()方法在JavaScript中是不受保护的,因此可以自定义这个方法,hasOwnProperty()可以作为属性名,此时,使用hasOwnProperty()无法判断是否属于自定义的属性。
列子:
let obj = new Object()
obj = {
hasOwnProperty: functiong(value) {
return false
},
prop: "string"
}
obj.hasOwnProperty('prop') // false 始终未false
如果担心上述情况,可以直接使用原型链上真正的 hasOwnProperty 方法,(当某个对象可能自有一个占用该属性名的属性时,就需要使用外部的 hasOwnProperty 获得正确的结果)。
列子:
({}).hasOwnProperty.call(foo, 'bar'); // true
// 也可以使用 Object 原型上的 hasOwnProperty 属性
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true