JavaScript原生Object.prototype.hasOwnProperty()

Posted Ly_cat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript原生Object.prototype.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

注意: 即使属性的值是 nullundefined,只要属性存在,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

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

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

以上是关于JavaScript原生Object.prototype.hasOwnProperty()的主要内容,如果未能解决你的问题,请参考以下文章

为什么原生 JavaScript 开发越来越多受欢迎?是否应该跟风用原生JavaScript代替 jQuery等库?

原生JavaScript运动功能系列:定时定点运动

JavaScript原生对象及扩展

JavaScript原生函数(内置函数)

什么是原生的javascript

使用原生javascript如何读写css样式?