迭代属性需要这个额外的hasOwnProperty
check:
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
// do stuff
}
}
这是必要的,因为对象的原型包含该对象的附加属性,这些属性在技术上是该对象的一部分。这些附加属性是从基对象类继承的,但仍然是obj
.
hasOwnProperty https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty只需检查这是否是该类特有的属性,而不是从基类继承的属性。
也可以拨打电话hasOwnProperty
通过对象本身:
if (obj.hasOwnProperty(prop)) {
// do stuff
}
但如果对象具有同名的不相关字段,则此操作将会失败:
var obj = { foo: 42, hasOwnProperty: 'lol' };
obj.hasOwnProperty('foo'); // TypeError: hasOwnProperty is not a function
这就是为什么调用它更安全Object.prototype
反而:
var obj = { foo: 42, hasOwnProperty: 'lol' };
Object.prototype.hasOwnProperty.call(obj, 'foo'); // true