我在测试时看到了控制台(Chrome)的行为。如果我输入console.log({key:'value'})
正在打印我所期望的Object {key: "value"}
。但是当我在控制台中直接输入{key:'value'}
时,它只会在我预期'value'
时打印Object {key: "value"}
。
在IE10和FF中看到相同的行为。 这种行为背后的原因是什么?
答案 0 :(得分:5)
这是因为你的对象被解释为一个块语句,其中一个语句由一个以标签开头的字符串文字组成。
// v---block----v
{key: "value"}
// ^--label
要使控制台将其解释为对象文字语法,它必须是表达式的一部分。如果你用parens包裹,你将获得预期的结果。
({key:"value"})
旁注:
这是非常奇怪的部分。语句是一个语句,因为它不会返回任何内容。那为什么它会返回"value"
?
在JavaScript中,语句具有类似于最终值的内容。 (我不记得究竟是什么叫它。)它不是程序代码中有用或可达的任何东西,但是当一个程序被评估时,该最终值将被返回到评估它的任何东西。
使用eval()
评估程序时也是如此。将返回其最终语句值。由于控制台中的代码为eval
,因此它会获得最终值并打印出来。
答案 1 :(得分:1)
那是因为你输入的内容被解释了。
{key:'value'}
是一个块并返回“value”。仅使用key:'value'
或'value'
即可获得相同的结果。
如果希望表达式返回对象,请键入({key:'value'})
。