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

Ano*_*oop 2 javascript console

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

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

I H*_*azy 5

这是因为你的对象被解释为一个块语句,其中一个语句由一个以标签开头的字符串文字组成.

//  v---block----v
    {key: "value"}
//    ^--label 
Run Code Online (Sandbox Code Playgroud)

对于控制台将其解释为对象文字语法,它需要是表达式的一部分.如果你用parens包裹,你会得到预期的结果.

({key:"value"})
Run Code Online (Sandbox Code Playgroud)

边注:

这是非常奇怪的部分.声明是一个声明,因为它不返回任何内容.那它为什么会回归"value"呢?

在JavaScript中,语句具有类似于最终值的内容.(我不记得它究竟叫什么.)它不是程序代码中有用或可达的任何东西,但是当一个程序被评估时,该最终值将被返回到评估它的任何值.

当您使用eval()评估程序时也是如此.将返回其最终语句值.由于控制台中eval的代码是'd,它获得最终值并打印出来.