为什么{}和{};在JS中评估不同?

时间:2019-03-09 18:35:24

标签: javascript

在Mac Chrome JS控制台中,我遇到以下结果:

{}的计算结果为Object()

{};评估为未定义

分号如何影响之前的内容?

这与ASI或其他解析规则有关吗?

2 个答案:

答案 0 :(得分:0)

这是因为JS将{}解释为object literal,而{};变成了code block
可以通过将其放在一对括号中来避免:({});将返回一个对象。

答案 1 :(得分:0)

Chrome实际上会像对待{}一样评估({}),因此强制解释器将其视为对象文字而不是空白的块;

{ 
  console.log("the line starts with { so it's treated is an empty block, not an object");
}

({}) //this is an object that is discarded after the line is read

要说明它实际上是一个空块,请参见以下代码:

{} == {} //syntax error because the effective code is "== {}"

并与此代码进行比较

({}) == {} //force the left side to be an object

在上面,没有错误,因为它得到了正确的评估,然后删除了结果。

以下是语法错误,因此在 情况下,Chrome会默默地删除括号

({};)