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. 在涉及return
、break
和continue
语句的场景中。如果这三个关键字后紧跟着换行,JavaScript 则会在换行处填补分号。例如:
return
true;
JavaScript 会解析成:
return; true;
而代码的本意是这样:
return true;
b. 在涉及“++”和“--”运算符的时候,如果将其用作后缀表达式,它和表达式应该在同一行。否则,行尾将填补分号,同时“++”或“--”将会作为下一行代码的前缀操作符并与之一起解析。例如:
x
++
y
这段代码将解析为x; ++y
,而不是x++; y
。
在此建议,不要忘记在语句后面加上分号。
JavaScript 权威指南(第六版) >> 第2章 此法结构 >> 2.5 可选的分号
网友评论