在我测试时,我看到了控制台(Chrome)的行为。如果我输入的是我所期望的console.log({key:'value'})
打印 。Object {key: "value"}
但是当我直接{key:'value'}
在控制台中输入时,它'value'
只会在我期望的时候打印Object {key: "value"}
。
在 IE10 和 FF 中看到了相同的行为。这种行为背后的原因是什么?
在我测试时,我看到了控制台(Chrome)的行为。如果我输入的是我所期望的console.log({key:'value'})
打印 。Object {key: "value"}
但是当我直接{key:'value'}
在控制台中输入时,它'value'
只会在我期望的时候打印Object {key: "value"}
。
在 IE10 和 FF 中看到了相同的行为。这种行为背后的原因是什么?
这是因为您的对象被解释为一个块语句,其中包含一个由标签前面的字符串文字组成的单个语句。
// v---block----v
{key: "value"}
// ^--label
为了让控制台将其解释为对象文字语法,它必须是表达式的一部分。如果你用括号括起来,你会得到预期的结果。
({key:"value"})
边注:
这是真正奇怪的部分。语句是语句,因为它不返回任何内容。那么它为什么会返回"value"
呢?
在 JavaScript 中,语句具有类似于最终值的东西。(我不记得它的确切名称。)它不是程序代码中有用或可访问的任何东西,但是当评估程序时,最终值将返回给评估它的任何东西。
eval()
用于评估程序时也是如此。它的最终语句值将被返回。由于控制台中的代码是eval
'd,因此它会获取最终值并打印它。
那是因为您键入的内容已被解释。
{key:'value'}
是一个块并返回“值”。你会得到与 just 相同的结果key:'value'
or 'value'
。
如果您想要一个返回对象的表达式,请键入({key:'value'})
.