在 Chrome
版本 ^72
中,如果我运行以下 JavaScript
则没有错误。
{ prop: p } = { prop: 'prop' }
>> { prop: 'prop' }
所以这行代码被解释为表达式语句,出乎意料。
但如果我运行相同的代码并在末尾添加分号,它会按预期运行。
{ prop: p } = { prop: 'prop' };
>> Uncaught SyntaxError: Unexpected token =
这是预期的,因为初始的 {
告诉 JavaScript
引擎它是一个代码块,除非我们用括号消除歧义。
为什么会出现分号而不是没有分号?
最佳答案
Why does this occur with the semi-colon but not without it?
Chrome 使用一个非常简单的测试来判断一行是否是对象字面量:该行是否以 {
开头并以 }
结尾?如果是,则该行被评估为一个表达式。
{ prop: p } = { prop: 'prop' }
通过了那个测试,但是 { prop: p } = { prop: 'prop' };
确实不是。
参见 Odd behaviour of comparison of object literals了解更多信息(不同的输入,相同的原因)。
关于javascript - 为什么在使用分号时此 JavaScript 不被解释为代码块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53712304/