只是出于好奇,当我通过 for(var p in object) 遍历一个对象时,是 pa 字符串还是其他什么?我总是只用一个语句来初始化变量,所以我想确保类型在 for 循环中使用之前是正确的。
问问题
62 次
2 回答
3
的值p
是关键。如果您的对象的所有键都是字符串,那么p
将始终是一个字符串。如果您遍历Map,则键将是对象。这一切都取决于你的对象。但是,是的,大多数时候它将是一个字符串。(很有可能,如果您使用的是地图,则不需要问这个问题。)
确保属性是可枚举属性的旧方法如下:
for (var p in myObject) {
if (myObject.hasOwnProperty(p)) {
// 'p' is a key for an enumerable property of myObject
}
}
使用 ES5 的新方法是使用Object.keys
:
Object.keys(myObject).forEach(function(p) {
// 'p' is a key for an enumerable property of myObject
});
不过,此代码需要 IE9 或旧版浏览器的 shim。简单地说,Object.keys(myObject)
返回对象键的数组(仅适用于可枚举属性)。
于 2012-11-12T08:01:51.373 回答
2
是的,p in 的类型for(var p in object)
是 a string
。
使用此控制结构将对象视为关联数组(实际上它们是相同的)。每个属性的键都分配给p
。
请注意,循环遍历这样的对象将为您提供所有可枚举的属性,不仅是您添加到对象的属性,还包括从原型链上继承的任何属性。
您可以将属性限制为您添加的属性,如下所示:
for(var p in myObject) {
if(myObject.hasOwnProperty(p)) {
}
}
于 2012-11-12T07:41:38.833 回答