6

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

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

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

但是,如果我在末尾使用分号运行相同的代码,它会按预期运行。

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

这是意料之中的,因为初始值{告诉JavaScript引擎它是一个代码块,除非我们用括号消除歧义。

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

4

1 回答 1

5

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

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

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


有关更多信息,请参阅对象文字比较的奇怪行为(不同的输入,相同的原因)。

于 2018-12-10T19:53:38.270 回答