通过javascript对象循环将键转换为字符串

use*_*760 6 javascript

当我在Javascript中循环一个对象来提取它的键时,为什么键在它们是整数时转换为字符串?

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

现在arr[ "1", "2" ]代替[1, 2]

mea*_*gar 18

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

考虑:

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

myObject = {}

myObject[key] = "value";

// writes "Blah"
document.write(Object.keys(myObject));
Run Code Online (Sandbox Code Playgroud)

请注意,如果您未提供a toString,则键将是字符串"[object Object]".