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"));
//报错
上面代码的报错是因为obj2
为 Object.create()
定义,let obj2 = Object.create(null,{})
,obj2
其原型为null
,在这个对象及其原型上是没有hasOwnProperty
方法,所以会报错。
因此,正确、通用的方法是:
function hasOwnProperty(obj, prop) {
return Object.prototype.hasOwnProperty.call(obj, prop);
}
网友评论