js hasOwnProperty
时间: 2023-09-10 07:10:22 浏览: 94
在 JavaScript 中,`hasOwnProperty` 是一个对象的方法,用于检查对象自身是否包含指定属性(不包括原型链上的属性)。
使用语法如下:
```javascript
obj.hasOwnProperty(prop)
```
其中,`obj` 是要检查的对象,`prop` 是要检查的属性名。
`hasOwnProperty` 方法返回一个布尔值,表示对象是否具有指定属性。如果对象自身拥有该属性,则返回 `true`,否则返回 `false`。
示例:
```javascript
const obj = {
name: 'John',
age: 25
};
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('toString')); // false
```
在上面的示例中,`obj` 对象自身具有名为 `'name'` 的属性,因此 `obj.hasOwnProperty('name')` 返回 `true`。而 `obj` 对象没有名为 `'toString'` 的属性,但是由于 JavaScript 中的所有对象都继承自原型链上的 `Object` 对象,因此它可以通过原型链访问到 `toString` 方法。所以 `obj.hasOwnProperty('toString')` 返回 `false`。
这是一个用于检查对象自身属性的常用方法,在某些情况下可以帮助你避免访问到原型链上的属性。
相关问题
JS hasOwnProperty
hasOwnProperty()是JavaScript中的一个函数,用于指示一个对象自身是否具有指定名称的属性。它是对Object.prototype.hasOwnProperty()方法的调用。
例如,在一个对象wm中,我们可能定义了一个属性名为'say'的属性,但是由于hasOwnProperty属性名没有被保护,所以通过wm.hasOwnProperty('say')获取到的结果可能是错误的。
为了获取正确的结果,我们可以使用原型链上真正的hasOwnProperty方法,并利用call方法将this指针指向wm对象。这样,我们就可以通过({}).hasOwnProperty.call(wm, 'say')来获取到正确的结果true。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [JavaScript hasOwnProperty() 函数实例详解](https://download.csdn.net/download/weixin_38605967/12965571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [js中的hasOwnProperty()方法](https://blog.csdn.net/weixin_43961899/article/details/97914618)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
js hasOwnProperty 区别
JavaScript中的hasOwnProperty()和in操作符有一些区别。hasOwnProperty()是对象的方法,用于检测一个对象是否具有指定名称的属性,并且只在该属性存在于对象的实例中时返回true。而in操作符是用于检测一个对象是否具有指定名称的属性,无论该属性是存在于对象的实例中还是存在于原型链中,只要通过对象能访问到该属性,就会返回true。
举个例子来说明区别:
```
var obj = { x: 1 };
console.log(obj.hasOwnProperty("x")); // true
console.log("x" in obj); // true
console.log(obj.hasOwnProperty("y")); // false
console.log("y" in obj); // false
console.log(obj.hasOwnProperty("toString")); // false
console.log("toString" in obj); // true
```
在这个例子中,obj对象具有属性"x",因此obj.hasOwnProperty("x")返回true,而"in"操作符也返回true。同样的道理,obj对象没有属性"y",所以obj.hasOwnProperty("y")和"in"操作符都返回false。但是obj对象继承了toString属性,所以obj.hasOwnProperty("toString")返回false,而"in"操作符返回true。
另外,还有一个相关的方法是propertyIsEnumerable(),它是hasOwnProperty()的增强版。它只有在属性存在于对象的实例中,并且该属性的可枚举性为true时才返回true。需要注意的是,一些内置属性是不可枚举的,通常由JavaScript代码创建的属性都是可枚举的,除非调用Object.defineProperty()方法来修改。
阅读全文