使用分号时,为什么此JavaScript不能解释为代码块?

时间:2018-12-10 19:25:10

标签: javascript google-chrome syntax destructuring object-destructuring

Chrome版本^72中,如果我运行以下JavaScript,则没有错误。

{ prop: p } = { prop: 'prop' }
>> { prop: 'prop' }

因此,代码行意外地被解释为一个表达式语句。

但是,如果我使用分号结尾运行相同的代码,则它将按预期运行。

{ prop: p } = { prop: 'prop' };
>> Uncaught SyntaxError: Unexpected token =

这是可以预期的,因为除非我们用括号消除歧义,否则初始{会告诉JavaScript引擎它是一个代码块。

为什么在分号时会发生这种情况,而在没有分号时会发生这种情况?

1 个答案:

答案 0 :(得分:5)

  

为什么在分号时会发生这种情况,而在没有分号时会发生这种情况?

Chrome使用非常简单的测试来查看行是否是对象文字:该行是否以{开头并以}结尾?如果是,则将该行评估为表达式

{ prop: p } = { prop: 'prop' }通过了测试,但是{ prop: p } = { prop: 'prop' };没有通过。


有关更多信息(不同的输入,相同的原因),请参见Odd behaviour of comparison of object literals