如果只有 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
最佳答案
您的 key 不是 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;
关于JavaScript 文字键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25292899/