2

只是出于好奇,当我通过 for(var p in object) 遍历一个对象时,是 pa 字符串还是其他什么?我总是只用一个语句来初始化变量,所以我想确保类型在 for 循环中使用之前是正确的。

4

2 回答 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 回答