JavaScript Standard Style

EnglishEspañol (Latinoamérica)Italiano (Italian)한국어 (Korean)Português (Brasil)简体中文 (Simplified Chinese)繁體中文 (Taiwanese Mandarin)

這是 standard 語法規則的摘要。

最快速掌握 standard 的方法,就是直接安裝並在你的程式碼中開始使用。

所有當今流行的程式語言都使用 AST 為基礎來做程式碼的最小化(code minification),所以可以完美的處理沒有分號的 JavaScript。

節選自 "An Open Letter to JavaScript Leaders Regarding Semicolons":

[依賴自動插入分號]非常的安全,而且合語法的 JavaScript 是跨瀏覽器都相容的。Closure compiler、yuicompressor、packer 和 jsmin 都可以正確的最小化,所以沒有效能的問題。

我很抱歉,這個語言社群的領導者們給你們謊言和恐懼,而不是教育你們。這是很羞恥的。我建議你們去學習一下 JavaScript 語句到底是如何結束的(還有哪些是不會結束的),如此你們就可以寫下漂亮的程式碼。

一般來說, \n 結束一個語句,除非:

  1. 這個語句有未結束的括弧、陣列、或物件,或其他不正常結束的句子(比如說用 ., 結尾)
  2. 該行的內容是 --++ (這種情況下,他會減少或增加下一個遇到的元素)
  3. 該行是 for()while()doif()else,而還沒有出現 {
  4. 隔行的開頭是 [(+*/-,. 或其他一定要兩個運算元的一元運算子。

第一種是非常顯而易見的。即使 JSLint 也允許 JSON 、有括弧的建構子和 var 誇多行語句的宣告可以有 \n 在其中。

第二種是非常奇怪的語法。我現實中沒有看過這種例子(除了在這類討論之外),會想寫出 i\n++\nj 這種奇怪的程式碼,這會被編譯器解讀成 i; ++j,而非 i++; j

第三種就非常好理解。if (x)\ny()if (x) { y() } 是相同的。建構子會一直往後找到一個區塊或一個語句。

; 是一個合法的 JavaScript 語句。所以 if(x);if(x){} 是相同的,代表 “如果 x, 什麼都不要做。” 當迴圈的判斷和更新是同一個函式的時候,有時候會被用到。不太常見,但是也不是沒看過。

第四種是那些常常被提到說:「看!你需要分號吧!」的例子。但是其實這很簡單可以避免,只要在該行開始前加個分號就好了。舉例來說,如果你原本要這樣寫:

foo();
[1,2,3].forEach(bar);

你其實可以這樣寫:

foo()
;[1,2,3].forEach(bar)

這樣的好處是這些前綴字是很好被察覺的,你可以很容易發現那些 ([ 開頭而沒有分號的地方。