前置逗號是不好的JavaScript程式碼書寫習慣嗎?

發表於2014-08-26
個人認為Airbnb的javascript程式碼規範是寫的比較好的, 不過其中有一章關於逗號Commas的使用是這樣寫的:
前置逗號(Leading commas):不要使用
其實在很多開源軟體中前置逗號是經常使用的,它是Haskell語言預設的程式碼風格。
Node.JS的前負責人isaacs(現npmjs.org負責人) 寫過一篇文章,討論將逗號寫在前面的優缺點。討論中儘管很多人無法適應comma-first。但其中有一條優點無法迴避,逗號前移可以很容易發現語法錯誤。
下段程式碼的d變數名後面少了一個逗號,這是我們經常犯的一個錯誤,在一般程式碼風格中,這個錯誤是非常不容易被發現的:
但在前置程式碼規範中,一眼就可以看得出來:
前置逗號與”.”的連續型寫法或者叫做鏈式寫法(可能還有”+”)是保持一致的,如:
前置逗號在最後新增刪除變數時只需要影響一行。而無需刪除或新增原來最後一個變數的結束符號。並且前置寫法,2個空格的tab即可將變數對齊,2個space可使程式碼更緊湊。傳統寫法,需要4個空格的tab才能使變數對齊。
另外在Twitter的bootstrap框架中,每個變數都使用var來宣告,不用連續宣告的方式。而且預設不用分號結束的:
這種格式的程式碼看上去也比較優美,同時避免了關於逗號的爭論:
其實省略分號也是可以借鑑的,所以本文認為比較好的逗號格式應該是這樣的:

負作用

其實省略分號也有負用,在與閉包結合時會有一些問題,如下段程式碼:
一個錯誤丟擲了,在JS解釋執行時,很可能將之合成了1行。
錯誤就產生了,所以很多開源框架都會在閉包前置或後置分號,以避免前人無意或故意遺漏分號從而造成錯誤,正確的寫法應該是:
不使用分號的bootstrap框架也是這麼幹的,不過bootstrap框架使用了看上去更加高階的+號分隔閉包並後置分號,不過這一套不適合程式碼與閉包混合使用的場景,還是不要學比較好。

相關文章