为什么这个 JavaScript 在使用分号时不被解释为代码块?
Why is this JavaScript not interpreted as a code block when semi-colon is used?
在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 使用一个非常简单的测试来查看一行是否是对象文字:该行是否以 {
开头并以 }
结尾?如果是,则该行被评估为 expression.
{ prop: p } = { prop: 'prop' }
通过了该测试,但 { prop: p } = { prop: 'prop' };
没有。
有关详细信息,请参阅 (不同的输入,相同的原因)。
在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 使用一个非常简单的测试来查看一行是否是对象文字:该行是否以 {
开头并以 }
结尾?如果是,则该行被评估为 expression.
{ prop: p } = { prop: 'prop' }
通过了该测试,但 { prop: p } = { prop: 'prop' };
没有。
有关详细信息,请参阅