Object.prototype.hasOwnProperty()

351 阅读1分钟

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