在Chrome
版本^72
中,如果我运行以下JavaScript
,则没有错误。
{ prop: p } = { prop: 'prop' }
>> { prop: 'prop' }
因此,代码行意外地被解释为一个表达式语句。
但是,如果我使用分号结尾运行相同的代码,则它将按预期运行。
{ prop: p } = { prop: 'prop' };
>> Uncaught SyntaxError: Unexpected token =
这是可以预期的,因为除非我们用括号消除歧义,否则初始{
会告诉JavaScript
引擎它是一个代码块。
为什么在分号时会发生这种情况,而在没有分号时会发生这种情况?
答案 0 :(得分:5)
为什么在分号时会发生这种情况,而在没有分号时会发生这种情况?
Chrome使用非常简单的测试来查看行是否是对象文字:该行是否以{
开头并以}
结尾?如果是,则将该行评估为表达式。
{ prop: p } = { prop: 'prop' }
通过了测试,但是{ prop: p } = { prop: 'prop' };
没有通过。
有关更多信息(不同的输入,相同的原因),请参见Odd behaviour of comparison of object literals。