var obj = {
name: "Simon",
age: "20",
clothing: {
style: "simple",
hipster: false
}
}
for(var propt in obj){
console.log(propt + ': ' + obj[propt]);
}
变量propt
如何表示对象的属性?它不是内置的方法或属性。为什么它会产生对象中的每个属性?
最佳答案
遍历属性需要这个额外的hasOwnProperty
检查:
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
// do stuff
}
}
这是必要的,因为对象的原型(prototype)包含对象的附加属性,这些属性在技术上是对象的一部分。这些附加属性继承自基对象类,但仍然是 obj
的属性。
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
关于javascript - 遍历对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8312459/