JavaScript Standard Style

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

js-standard-style

這是 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)

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