2

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

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

4

2 回答 2

5

这是因为您的对象被解释为一个块语句,其中包含一个由标签前面的字符串文字组成的单个语句。

//  v---block----v
    {key: "value"}
//    ^--label 

为了让控制台将其解释为对象文字语法,它必须是表达式的一部分。如果你用括号括起来,你会得到预期的结果。

({key:"value"})

边注:

这是真正奇怪的部分。语句是语句,因为它不返回任何内容。那么它为什么会返回"value"呢?

在 JavaScript 中,语句具有类似于最终值的东西。(我不记得它的确切名称。)它不是程序代码中有用或可访问的任何东西,但是当评估程序时,最终值将返回给评估它的任何东西。

eval()用于评估程序时也是如此。它的最终语句值将被返回。由于控制台中的代码是eval'd,因此它会获取最终值并打印它。

于 2012-10-07T13:56:59.593 回答
1

那是因为您键入的内容已被解释。

{key:'value'}是一个块并返回“值”。你会得到与 just 相同的结果key:'value'or 'value'

如果您想要一个返回对象的表达式,请键入({key:'value'}).

于 2012-10-07T13:57:06.450 回答