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