本文主要是介绍二.可选的分号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
与很多编程语言一样,Javascript使用(;)分隔语句。这对于保持代码清晰很重要:如果没有分隔符,一条语句的结尾可能是另一条语句的开头,反之亦然。在Javascript中,如果两条语句分别写在两行,通常可以省略它们之间的分号。另外在程序末尾,如果接下来的记号是右花括号},那么也可以省略分号。很多Javascript程序员(包括本书中的代码示例)使用分号明确标识语语句结束,即便这些分号并非必须。另一种风格是尽可能省略分号,只在少数必要情况下才用。无论使用哪种风格,都需要了解一些关于Javascript中可选分号的细节。
来看下面的代码。因为两条语句位于两行,所以第一个分号可以省略:
a = 3;
b = 4;
然后,像下面这样写,分号就是必需的:
a = 3; b = 4;
注意,Javascript并非任何时候都把换行符当作分号,而只是在不隐式添加分号就无法解析代码的情况下才这么做。更准确的讲(除了稍后介绍的第三种例外情况),Javascript只在下一个非空格字符无法被解释为当前语句的一部分时才把换行符当作分号。来看下面的代码:
let a
a
=
3
console.log(a)Javascript将以上代码解释为:
let a;a=3;console.log(a);
之所以把第一个换行符当作分号,是因为如果没有分号,Javascript就无法解析代码let a a。第二个本身是一条独立的语句,但Javascript并没有把第二个换行符当作分号,因为它还可以继续解析更长的语句 a = 3;。
因为它还可以继续解析更长的语句 a = 3;。
这些语句终止规则会导致某些意外情形。以下代码看起来是两条位于两行的语句:
let y = x + f
(a + b).toString()
但第二行的圆括号可以被解释为第一行f的函数调用,所以Javascript将这两行代码解释为:
let y = x + f(a+b).toString();
而这很有可能不是代码作者的真实意图。为了保证代码被解释为两条语句,这里必须要明确添加加一个分号。通常,如果语句以(、[、/、+或-开头,就有可能被解释为之前语句的一部分。实践中,以/、+和-开头的语句极少,但以(和[开头的语句则并不鲜见,至少在某种Javascript编程风格下经常会看到。有的程序员喜欢在所有这种语句前面都防御性地添加一个分号,这样即使它前面的语句被修改,删掉了之前末尾的分号,也不会影响当前语句:
let x = 0 // 这里省略分号
;[x,x+1,x+2].forEach(console.log) // 防御:保证这条语句独立
Javascript在不能把第二行解析为第一行的连续部分时,对换行符的解释有第三种例外情况。第一种情况涉及return、throw、yield、break和continue语句(参见第5章),这些语句经常独立存在,但有时候后面也会跟一个标识符或表达式。如果这几个单词后面(任何其他标记前面)有换行符,Javascript就会把这个换行符解释为分号。例如,如果你这么写:
return
true;
Javascript 假设你的意图是:
return; true;
但你的意图可能是:
return true;
这意味着,一定不能在return、break或continue等关键字和它们后面的表达式之间加入换行符。如果加入了换行符,那代码出错后的调试会非常麻烦,因为错误不明显。
第二种例外情况涉及++和--操作符(参见4.8节)。这些操作符既可以放在表达式前面,也可以放在表达式后面。如果想把这两个操作符作为后置操作符,那它们必须与自己操作的表达式位于同一行。第三种例外情况涉及使用简洁的“箭头”语法定义的函数:箭头=>必须跟参数列表在同一行。
这篇关于二.可选的分号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!