关于对象 hasOwnProperty 方法要记住的一点

1715 4 年前
所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。

hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true,否则返回false

请记住:继承Object 的对象都会继承hasOwnProperty 方法。其定义在Object.prototype上。

请看下面的例子:

let obj1 = {
    name:"tensweets.com"
};
let obj2 = Object.create(null,{
    name: {
        writable:true,
        configurable:true,
        enumerable:true,
        value: "hello"
    },
});
function hasOwnProperty1(obj, prop) {
    return Object.prototype.hasOwnProperty.call(obj, prop);
}

function hasOwnProperty2(obj, prop) {
    return obj.hasOwnProperty(prop);
}

console.log(hasOwnProperty1(obj1,"name"));
//true
console.log(hasOwnProperty1(obj2,"name"));
//true
console.log(hasOwnProperty2(obj1,"name"));
//true
console.log(hasOwnProperty2(obj2,"name"));
//报错

上面代码的报错是因为obj2Object.create()定义,let obj2 = Object.create(null,{})obj2其原型为null,在这个对象及其原型上是没有hasOwnProperty方法,所以会报错。

因此,正确、通用的方法是:

function hasOwnProperty(obj, prop) {
  return Object.prototype.hasOwnProperty.call(obj, prop);
}
© 2018邮箱:11407215#qq.comGitHub沪ICP备12039518号-6