协慌网

登录 贡献 社区

迭代对象属性

var obj = {
		name: "Simon",
		age: "20",
		clothing: {
			style: "simple",
			hipster: false
		}
	}

	for(var propt in obj){
		alert(propt + ': ' + obj[propt]);
	}

变量propt如何表示对象的属性?它不是内置方法或属性。那为什么它会提出对象中的每个属性?

答案

迭代属性需要额外的hasOwnProperty检查:

for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}

这是必要的,因为对象的原型包含对象的附加属性,这些属性在技术上是对象的一部分。这些附加属性继承自基础对象类,但仍是object属性。

hasOwnProperty只是检查这是否是特定于此类的属性,而不是从基类继承的属性。

从 JavaScript 1.8.5 开始,您可以使用Object.keys(obj)来获取在对象本身上定义的属性数组(对于obj.hasOwnProperty(key)返回 true 的obj.hasOwnProperty(key) )。

Object.keys(obj).forEach(function(key,index) {
    // key: the name of the object key
    // index: the ordinal position of the key within the object 
});

这比使用 for-in 循环更好(也更可读)。

它支持这些浏览器:

  • Firefox(Gecko):4(2.0)
  • Chrome:5
  • Internet Explorer:9

有关更多信息,请参阅Mozilla Developer Network Object.keys()的参考资料

这是for...in statementMDNECMAScript 规范 )。

你可以把它读作 “ 每个属性obj对象,依次将各属性分配给PROPT变量”。