javascript - 为什么在使用分号时此 JavaScript 不被解释为代码块?

标签 javascript google-chrome syntax destructuring object-destructuring

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/

相关文章:

google-chrome - 在操纵up中设置特定的Chrome标志(启用和禁用)

bash - bash 命令 "rm *~"有什么作用?

javascript - 如何在 javascript/jquery 事件后更改 Django 中的服务器端数据?

javascript - Primefaces PF函数

javascript - 如何检索元素相对于 svg viewbox 的坐标?

node.js - Chrome 扩展程序中的 Origin header

database - GQL 语法中的子选择(数据存储查看器)

scala - 等号和类型不匹配

javascript - 积分 'react-thunk' : 'cannot call a class as a function'

javascript - 为什么第一个复选框起作用但第二个复选框不起作用?