javascript:propertyname的数据类型

时间:2012-11-12 07:37:35

标签: javascript properties

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

2 个答案:

答案 0 :(得分: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或旧版浏览器的垫片。简而言之,Object.keys(myObject)返回对象键的数组(仅适用于可枚举属性)。

答案 1 :(得分:2)

是的,for(var p in object)中的p类型为string

使用此控件结构将对象视为关联数组(实际上它们无论如何都是相同的)。每个属性的键都分配给p

请注意,循环遍历这样的对象将为您提供所有可枚举属性,而不仅仅是您添加到对象中的属性,而是从原型链中继承的任何属性 。

您可以将属性限制为您添加的属性,如下所示:

for(var p in myObject) {
  if(myObject.hasOwnProperty(p)) {
  }
}