为什么{key:'value'}在控制台中打印“值”

时间:2012-10-07 13:55:24

标签: javascript console

我在测试时看到了控制台(Chrome)的行为。如果我输入console.log({key:'value'})正在打印我所期望的Object {key: "value"}。但是当我在控制台中直接输入{key:'value'}时,它只会在我预期'value'时打印Object {key: "value"}

在IE10和FF中看到相同的行为。 这种行为背后的原因是什么?

2 个答案:

答案 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'})