如果只有JavaScript字符串和数字可以是对象文字键,有人可以解释为什么这在控制台中有效吗?
var obj = {null: 0, true: 1, false: -1}
> Object {null: 0, true: 1, false: -1}
obj.null
> 0
obj.true
> 1
obj.false
> -1
答案 0 :(得分:10)
您的密钥不是null
或true
,而是"null"
和"true"
。
请注意这不是转化。 {key:value}
符号是写{"key":value}
的另一种方式。 object literal表示法中的密钥没有发生转换,当密钥是有效的JavaScript标识符时(null
就是这种情况),引号只是可选的。
如果您使用括号表示法(即obj[true]=1
),它会发生什么不同:任何不是字符串的东西都会被转换为字符串以便使用在这种情况下是关键。
这种区别在这里并不明显,但它可能很重要:你会得到一些非常不同的东西
var a = {eval:1}; // no conversion, the key is "eval"
和
var a = {};
a[eval] = 1; // conversion, the key is eval.toString()
与
相同(没有跨浏览器保证)var a = {"function eval() { [native code] }":1};
而
var a = {true:1};
等同于
var a = {};
a[true] = 1;