var o = new Object();
o.OwnProperty('toString') // false
'toString' in o // true
里这句
'toString' in o
这句为何会返回 true?
var o = new Object();
o.OwnProperty('toString') // false
'toString' in o // true
里这句
'toString' in o
这句为何会返回 true?
我觉得你不应该奇怪in
,反而应该奇怪hasOwnPropery
吧。不信你运行o.hasOwnProperty('hasOwnProperty')
试试。关于这个MDN上不是已经讲的很详细了么:
Every object descended from Object inherits the hasOwnProperty method. This method can be used to determine whether an object has the specified property as a direct property of that object; unlike the in operator, this method does not check down the object's prototype chain.
Object.prototype.hasOwnProperty
所以你可以这么理解:hasOwnProperty
是检查自己真正拥有的属性,不检查继承的属性;而in
是只要在对象内的属性都会检查。
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答873 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
obj.hasOwnProperty判断某属性是“自身属性”还是“继承自原型对象的属性”;
in操作符判断的是该对象的某属性是否存在且可枚举;