为什么在使用分号时这个JavaScript不会被解释为代码块?

Ada*_*son 6 javascript syntax google-chrome destructuring object-destructuring

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

{ prop: p } = { prop: 'prop' }
>> { prop: 'prop' }
Run Code Online (Sandbox Code Playgroud)

因此意外地将代码行解释为表达式语句.

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

{ prop: p } = { prop: 'prop' };
>> Uncaught SyntaxError: Unexpected token =
Run Code Online (Sandbox Code Playgroud)

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

为什么这会出现在分号上但不是没有呢?

Fel*_*ing 5

为什么这会出现在分号上但不是没有呢?

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

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


有关详细信息,请参阅对象文字比较的奇数行为(不同的输入,相同的原因).