首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

object.hasOwnProperty

hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性

语法

代码语言:javascript
复制
obj.hasOwnProperty(prop)

参数

prop要检测的属性 ?字符串?名称或者Symbol

返回值

用来判断某个对象是否含有指定的属性的Boolean?。

描述

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

示例

使用hasOwnProperty方法判断属性是否存在

下面的例子检测了对象o是否含有自身属性prop:

代码语言:javascript
复制
o = new Object();
o.prop = 'exists';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');   // returns true
changeO();
o.hasOwnProperty('prop');   // returns false

自身属性与继承属性

下面的例子演示了hasOwnProperty方法对待自身属性和继承属性的区别:

代码语言:javascript
复制
o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop');             // returns true
o.hasOwnProperty('toString');         // returns false
o.hasOwnProperty('hasOwnProperty');   // returns false

遍历一个对象的所有自身属性

下面的例子演示了如何在遍历一个对象的所有属性时忽略掉继承属性,注意这里for...in? 循环只会遍历可枚举属性,所以不应该基于这个循环中没有不可枚举的属性而得出?hasOwnProperty 是严格限制于可枚举项目的(如同?Object.getOwnPropertyNames())。

代码语言:javascript
复制
var buz = {
  fog: 'stack'
};

for (var name in buz) {
  if (buz.hasOwnProperty(name)) {
    console.log('this is fog (' + 
?     name + ') for sure. Value: ' + buz[name]);
  }
  else {
    console.log(name); // toString or something else
  }
}

使用 hasOwnProperty 作为属性名

JavaScript 并没有保护 hasOwnProperty 属性名,因此某个对象是有可能存在使用这个属性名的属性,使用外部的?hasOwnProperty 获得正确的结果是需要的:

代码语言:javascript
复制
var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // always returns false

// Use another Object's hasOwnProperty
// and call it with 'this' set to foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// It's also possible to use the hasOwnProperty property
// from the Object prototype for this purpose
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

Note that in the last case there are no newly created objects.

规范

Specification

Status

Comment

ECMAScript 3rd Edition (ECMA-262)

Standard

Initial definition. Implemented in JavaScript 1.5.

ECMAScript 5.1 (ECMA-262)The definition of 'Object.prototype.hasOwnProperty' in that specification.

Standard

?

ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Object.prototype.hasOwnProperty' in that specification.

Standard

?

ECMAScript Latest Draft (ECMA-262)The definition of 'Object.prototype.hasOwnProperty' in that specification.

Living Standard

?

浏览器兼容性

Feature

Chrome

Edge

Firefox

Internet Explorer

Opera

Safari

Basic Support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

Feature

Android

Chrome for Android

Edge mobile

Firefox for Android

IE mobile

Opera Android

iOS Safari

Basic Support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com