变量obj={name:“西蒙”,年龄:“20”,服装:{style:“简单”,嬉皮士:假}}for(obj中的var propt){console.log(propt+':'+obj[propt]);}
变量propt如何表示对象的财产?它不是内置方法或属性。为什么它会产生对象中的每个属性?
变量obj={name:“西蒙”,年龄:“20”,服装:{style:“简单”,嬉皮士:假}}for(obj中的var propt){console.log(propt+':'+obj[propt]);}
变量propt如何表示对象的财产?它不是内置方法或属性。为什么它会产生对象中的每个属性?
当前回答
如果您的环境支持ES2017,那么我将推荐Object.entries:
Object.entries(obj).forEach(([key, value]) => {
console.log(`${key} ${value}`);
});
如Mozillas Object.entries()文档所示:
Object.entries()方法返回给定对象自身的数组可枚举属性[key,value]对,顺序与由…提供。。。in循环(区别在于for in循环还列举了原型链中的财产)。
基本上,使用Object.entries,我们可以放弃旧的for。。。循环中:
// This step is not necessary with Object.entries
if (object.hasOwnProperty(property)) {
// do stuff
}
其他回答
这只是为了。。。在循环中。查看Mozilla的文档。
for循环遍历对象的所有财产。propt在for循环的第一行中定义。它是一个字符串,是obj对象的属性的名称。在循环的第一次迭代中,propt将是“name”。
从JavaScript 1.8.5开始,您可以使用Object.keys(obj)获取在对象本身上定义的财产数组(obj.hasOwnProperty(key)返回true的属性)。
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(壁虎):4(2.0)铬:5Internet Explorer:9
有关更多信息,请参阅Mozilla Developer Network Object.keys()的参考。
Dominik的回答很完美,我更喜欢这样做,因为读起来更干净:
for (var property in obj) {
if (!obj.hasOwnProperty(property)) continue;
// Do stuff...
}
这是为了。。。in语句(MDN、ECMAScript规范)。
您可以将其读为“对于obj对象中的每个属性,依次将每个属性分配给PROPT变量”。