js hasOwnProperty 区别
时间: 2023-11-09 12:57:13 浏览: 74
浅谈js使用in和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()方法来修改。
阅读全文