当我在Javascript中循环访问一个对象以提取其键时,为什么这些键在它们是整数时会转换为字符串?
obj = {1:'a', 2:'b'};
arr = [];
for(var key in obj){
if (obj.hasOwnProperty(key)){
arr.push(key);
}
}
现在arr
是[ "1", "2" ]
而不是[1, 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