Javascript 哈希键是否自动转换为int?

Javascript 哈希键是否自动转换为int?,javascript,json,Javascript,Json,JavaScript控制台代码段: > obj = {"1": "Hello, World", "2": "Goodbye, World"}; > obj[1] "Hello, World" > obj["1"] "Hello, World" 因此,出于某种原因,如果您有可以转换为整数的键,那么也可以使用整数访问相应的值。这非常有用:我通过Ajax获取JSON,在JSON中,将int作为散列键是不合法的(或者至少Python的JSON序列化程序这样认为)。但是,我需要

JavaScript控制台代码段:

> obj = {"1": "Hello, World", "2": "Goodbye, World"};
> obj[1]
  "Hello, World"
> obj["1"]
  "Hello, World"
因此,出于某种原因,如果您有可以转换为整数的键,那么也可以使用整数访问相应的值。这非常有用:我通过Ajax获取JSON,在JSON中,将int作为散列键是不合法的(或者至少Python的JSON序列化程序这样认为)。但是,我需要以INT的形式访问它们,这就是我想知道的原因:

  • 为什么会这样
  • 它可靠吗?(我可以看到它在Chrome和Firefox上运行,这对我的应用程序来说已经足够了,但我不想让它成为一些常见的bug,在下一个版本中得到修复)

  • JavaScript喜欢将数字转换为字符串。只要有可能,它就会。检查类型转换规则

    这可能有助于:

    编辑--有趣的事实:

    >>> "3" + "5"
    "35"
    >>> "3" - "2"
    1
    

    JavaScript对象的所有属性都是字符串。请注意此行为:

    var foo = {};
    foo[foo] = "hello";
    console.log( foo["[object Object]"] );
    //-> "hello"
    
    foo.toString = function(){ return "sassy" };
    foo.sassy = "Oh yes!";
    console.log( foo[foo] );
    //-> "Oh yes!"
    

    因此,当您设置或获取
    foo[1]
    时,实际上是在设置/获取
    foo[1.toString()]
    。是的,这是可靠的。

    我不会说您的密钥已转换为整数。我想说,
    toString()
    是在您的“访问器”(您在obj[1]中使用的键)上调用的,因为它应该是字符串。

    1和“1”在类似javascript的松散类型语言中的意思几乎相同(请记住,JSON是javascript对象表示法)。

    正确,但不是当前问题的参数。请参阅Phrogz的答案以了解原因。