繁体   English   中英

我可以在所有JavaScript版本中(如果有的话)在行尾省略每个分号吗?

[英]May I omit every semicolon at the end of line in all version (if any) of JavaScript?

我正在学习JavaScript,但我莫名其妙地发现我可以跳过输入; 在一行的末尾,只要该行中只有一个语句即可。 实际上,我已经习惯了这一点。 我用Swift开发了一个简单的iOS应用程序,它也支持这种语法。

但是我想知道的是,是否有特定版本的JavaScript或某种不允许程序员省略最后一个分号的JavaScript。 许多语言的语法都有变化。 所以我想JavaScript可能有这种问题。

请注意,尽管所有版本的JavaScript都支持ASI,但仍有ASI的陷阱,这意味着您无法摆脱所有分号。

例如,以下内容将无法正常运行:

function foo() { return [2, 3] }

var x, y, i, j
j = 2
i = j
[x,y] = foo()

您可能希望ijx等于2,而y等于3,如果每行以分号结尾,则会发生这种情况。 但是,事实并非如此。

实际上, i[2,3] ,而xyundefined 当ASI在该代码段上运行时,它将最后两行解释为属性访问:

i = j[x,y] = foo()

虽然它原本打算成为破坏性的行动:

i = j;
[x,y] = foo();

解决此问题的方法是在不以[]或()开头的任何行之前使用“防御分号”,而该行不应被视为上一条语句的继续。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM