JavaScript里的分號,你加還是不加?
1.前言
我們接觸的大部分編程語言,都會以 分號 作為代碼的結束,將程式陳述句分隔開來,JavaScript同樣如此,這對增強代碼的整潔性和可讀性是非常重要的,缺乏分隔符,一條陳述句的結束就變成了另一條陳述句的開始,反之亦然,在我們初學編程,接觸C語言的時候,就常常因為代碼結尾沒有分隔符或者分隔符寫錯,而引發程式bug,
對于很多的編程語言,在一條陳述句結尾加上分號是必須的,然而,對于JavaScript,則并不如此,在JavaScript中,如果陳述句各自獨占一行,通常可以省略陳述句之間的分號(程式的結尾或者右“}”之前的分號也可以省略,)
因此,在撰寫JavaScript程式時,一般會有兩種編碼習慣,加分號 和 不加分號 :
- 加分號: 許多程式員使用分號來明確標記陳述句的結束,即使在并不完全需要分號的時候也是如此;
- 不加分號: 另一種風格是,在任何可以省略分號的地方,都將其省略,只有在不得不用的時候才使用分號,
下面來記錄和講解一下,JavaScript中使用分號的細節問題,
2.什么情況下可以不加分號
不加分號的情況下,JavaScript在決議時會自動插入分號,在滿足以下兩個條件的情況下,JavaScript會自動插入分號,可以不加分號:
2.1每條陳述句各占一行
如果多條陳述句中每條陳述句各占一行,則陳述句結尾的分號可以省略,JavaScript在決議時會自動填補分號,例如:
let x = 10
let y = 20
console.log(x+y) //3
如果寫在同一行,則必須要加分號:
let x , y
x = 10 y = 30
console.log(x+y) //SyntaxError: Unexpected identifier
不寫分號報錯,
2.2 不加分號則上下兩行代碼無法決議
JavaScript并不是在所有換行的地方都填補分號,只有在缺少了分號就無法正確決議代碼的情況下,才會填補分號;
如下示例:
let a
a
=
3
console.log(a) //3
顯然,代碼被決議為:
let a;
a=3;
console.log(a);
在2行 3行都沒有插入分號,
注意:
這些陳述句的分隔規則會導致一些意想不到的情形,如以下的一個示例;
let m = n + f
(b+c).toString()
但該陳述句最侄訓被決議為:
let m = n + f(a+b).toString();
這和源代碼表達的意思不合,但這決議下來并不會出錯,
3.特殊情況
通俗來講,如果一條陳述句以 "(" ,"[" , "/" , "+" , "-" 開始,它們極有可能和前面一條陳述句一起決議,
如果前一條陳述句無法和后一條陳述句合并決議,JavaScript才會在第一條陳述句后插入分號,這是通用規則,
但是,有2個例外,
3.1 return ,break和continue
如果涉及 return 、break、continue 時,如果這三個關鍵字后緊跟換行,則該關鍵字后一定會插入分號;
如:
return
true
一定會被決議成
return;
true;
這顯然違背了代碼的本意,
3.2 有 ”++“ 或 ”--“運算子時
如果涉及 ”++“ ,”--“運算子的時候,這些運算式可以作為運算式的前綴,也可以作為運算式的后綴,
如果將其作為運算式的后綴的話,它和運算式應該在同一行,否則,JavaScript會在行末添加添加分號,并且 ”++“ "--"會被作為下一句的前綴運算子與下一句一起決議,
如:
x
++
y
這段代碼決議為:
x;
++y;
而不是:
x++;y;
4.使用分號的好處
- 加上分號可以避免很多錯誤(例如,不完整的輸入),開發人員可以放心的通過洗掉多余的空格來壓縮代碼;
- 加上分號在某些情況下可以增進代碼的性能,因為這樣決議器就不用花多余的時間去推測在哪里添加分號了,
5.參考文獻
-
《JavaScript高級程式設計》
-
《JavaScript權威指南》
6.結語
天氣好熱,去開個西瓜吃,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/11189.html
標籤:JavaScript
