你是对的,属性名称必须是字符串,但转换是为你完成的。也就是说,和o = {1: "test""}
是一样的o = {"1": "test"}
。同样,o[45]
两者o[45] = "hi"
都为您转换属性名称,使用toString()
.
这是一个快速演示,我已经覆盖toString()
了它以使其显而易见:
var o = {xyz: 100, toString: function() { console.log("someone string'd me"); return "ooo"; }}
var x = {};
x[o] = "test";
// console says "someone stringed me"
console.log(x["ooo"]);
// console says "test";
console.log(x[o]);
// console says "someone string'd me", then "test"
您可以看到每次o
都用作属性,它使用 . 隐式转换为字符串o.toString()
。所以要清楚,使用数字键不是问题。其实你可以测试["hi", "ol", "dad"]["1"]
一下,和["hi", "ol", "dad"][1]`是一回事。