【JavaScript】详解Object.prototype.hasOwnProperty()

【JavaScript】详解Object.prototype.hasOwnProperty()Object.prototype.hasOwnProperty() hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。用通俗的话来

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

注意:只有在最后一种情况下,才不会新建任何对象。

developer.mozilla.org/zh-CN/docs/…

今天的文章【JavaScript】详解Object.prototype.hasOwnProperty()分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15632.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注