循环遍历javascript对象将键转换为字符串

时间:2015-08-17 20:14:30

标签: javascript

当我在Javascript中循环访问一个对象以提取其键时,为什么这些键在它们是整数时会转换为字符串?

obj = {1:'a', 2:'b'};
arr = [];
for(var key in obj){
  if (obj.hasOwnProperty(key)){
    arr.push(key);
  }
}

现在arr[ "1", "2" ]而不是[1, 2]

2 个答案:

答案 0 :(得分:16)

这不是转换键的循环;键只能是字符串这一事实。您不能拥有任何其他类型的密钥。如果您的密钥不是字符串,则当您将其用作属性名称时,JavaScript会将其转换为字符串。

考虑:

key = {
  toString: function () { return "Blah" }
};

myObject = {}

myObject[key] = "value";

// writes "Blah"
document.write(Object.keys(myObject));

请注意,如果您未提供toString,则密钥将为字符串"[object Object]"

答案 1 :(得分:0)

meagar说的是正确的,但如果由于某种原因你想要数字,你可以将它们加前缀为加号;



obj = {1:'a', 2:'b'};
arr = [];
for(var key in obj){
  if (obj.hasOwnProperty(key)){
    arr.push(+key);
  }
}

console.log(arr)




说,你可能有兴趣研究Object.keys method