Object.prototype.hasOwnProperty()
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。用通俗的话来说就是:用来判断一个属性是定义在对象本身而不是继承自原型链的。
语法
obj.hasOwnProperty(prop)
- prop 要检测的属性的 String 字符串形式表示的名称,或者 Symbol。
- 返回值 用来判断某个对象是否含有指定的属性的布尔值 Boolean。
实例
const obj = {};
obj.property1 = 88;
console.log(obj.hasOwnProperty('property1')); // true
console.log(obj.hasOwnProperty('toString')); // false
console.log(obj.hasOwnProperty('hasOwnProperty')); // false
注意: 即使属性的值是 null
或 undefined
,只要属性存在,hasOwnProperty
依旧会返回 true
。
o = new Object();
o.lisi = null;
o.hasOwnProperty('lisi'); // 返回 true
o.lizi = undefined;
o.hasOwnProperty('lizi'); // 返回 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
自身属性与继承属性 下面的例子演示了 hasOwnProperty 方法对待自身属性和继承属性的区别:
o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop'); // 返回 true
o.hasOwnProperty('toString'); // 返回 false
o.hasOwnProperty('hasOwnProperty'); // 返回 false
使用 hasOwnProperty 作为属性名 JavaScript 并没有保护 hasOwnProperty
这个属性名,所以就会出现设置hasOwnProperty为函数名的情况:
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
那么,在使用:
foo.hasOwnProperty('bar'); // 始终返回 false
为解决这种情况,可以使用下面这两种方式:
// 1. 可以直接使用原型链上真正的 hasOwnProperty 方法
({}).hasOwnProperty.call(foo, 'bar'); // true
// 2. 使用 Object 原型上的 hasOwnProperty 属性
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
注意:只有在最后一种情况下,才不会新建任何对象。
今天的文章【JavaScript】详解Object.prototype.hasOwnProperty()分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15632.html