JavaScript 语句行尾的可选分号

JavaScript 和其他许多编程语言一样,使用分号(;)将语句分隔开。这对增强代码的可读性和整洁性是非常重要的。在 JavaScript 中,如果语句各自独占一行,通常可以省略语句之间的分号。

不过,在一些地方省略掉分号可能会使你的代码发生意外的错误。以下是需要注意的细节:

1. JavaScript 并不是在所有换行处都填补分号:只有在缺少了分号就无法正确解析代码的时候,JavaScript 才会填补分号。


var a

a

=

3

console.log(a)

JavaScript 将其解析为:


var a; a = 3; console.log(a);

// JavaScript 给第一行添加了分号,因为如果没有分号,JavaScript 就无法解析代码 var a a。

// 第二个 a 可以单独当作一条语句 “a;”,但 JavaScript 并没有给第二行结尾填补分号,

// 因为它可以和第三行内容一起解析为 “a = 3”;

再看一个例子:


var y = x + f

(a+b).toString()

JavaScript 会把这段代码解释成:


var y = x + f(a+b).toString();  // 第二行的圆括号和第一行的 f 组成了函数调用

这或许与我们的本意大相径庭,所以为了保证代码的正确执行,我们必须填写行尾的显式分号。

2. 通常来讲,如果一条语句以“(”、“[”、“/”、“+”或“-”开始,那么它极有可能和前一条语句合在一起解析。

以“/”、“+”和“-”开始的语句并不常见,而以“(”和“[”开始的语句则非常常见。所以一些保守的程序员为保守起见,喜欢在语句前加上一个分号以保证程序的正确执行。例如:


var x = 0   // 这里省略了分号

;[x, x+1, x+2].forEach(console.log) // 前面的分号保证了正确地语句解析

如果当前语句和下一行语句无法合并解析,JavaScript 则在第一行后填补分号,这是通用规则,但有两个例外:

a. 在涉及returnbreakcontinue语句的场景中。如果这三个关键字后紧跟着换行,JavaScript 则会在换行处填补分号。例如:


return

true;

JavaScript 会解析成:


return; true;

而代码的本意是这样:


return  true;

b. 在涉及“++”和“–”运算符的时候,如果将其用作后缀表达式,它和表达式应该在同一行。否则,行尾将填补分号,同时“++”或“–”将会作为下一行代码的前缀操作符并与之一起解析。例如:


x

++

y

这段代码将解析为x; ++y,而不是x++; y

在此建议,不要忘记在语句后面加上分号。

JavaScript 权威指南(第六版) >> 第2章 此法结构 >> 2.5 可选的分号

    原文作者:winwangqi
    原文地址: https://www.jianshu.com/p/f09367dd4769
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞