JavaScript 代碼規(guī)范

1、縮進(jìn)

每一行的層級(jí)由 4 個(gè)空格組成,避免使用制表符縮進(jìn)

2、行的長(zhǎng)度

每行長(zhǎng)度不超過(guò) 80 個(gè)字符,如果超過(guò),應(yīng)當(dāng)在一個(gè)運(yùn)算符(逗號(hào),加號(hào)等)后換行。下一行應(yīng)當(dāng)增加兩級(jí)縮進(jìn)( 80個(gè)空格)

3、運(yùn)算符的行間距

二元運(yùn)算符前后必須使用一個(gè)空格來(lái)保持表達(dá)式的簡(jiǎn)潔,操作符包括賦值運(yùn)算符和邏輯運(yùn)算符

        1 + 2 = 3

4、括號(hào)間距

當(dāng)使用括號(hào)時(shí),緊接左括號(hào)之后和緊接右括號(hào)之前不應(yīng)該有空格

        if (num > 1)

5、對(duì)象直接量

對(duì)象直接量應(yīng)當(dāng)使用如下格式

  • 起始左花括號(hào)應(yīng)當(dāng)同表達(dá)式保持一行

  • 每個(gè)屬性的名值對(duì)應(yīng)當(dāng)保持一個(gè)縮進(jìn),第一個(gè)屬性應(yīng)當(dāng)在左花括號(hào)后另起一行

  • 每個(gè)屬性的名值對(duì)應(yīng)當(dāng)使用不含引號(hào)的屬性名,其后緊跟一個(gè)冒號(hào)(之前不含空格) ,而后是值

  • 倘若屬性值是函數(shù)類(lèi)型,函數(shù)體應(yīng)當(dāng)在屬性名之下另起一行,而且其前后就均保留一個(gè)空格

  • 一組相關(guān)的屬性前后可以插入空行以提升代碼的可讀性結(jié)束的右花括號(hào)應(yīng)當(dāng)獨(dú)占一行

        let obj = {
            // 插入空行
            a: 1,

            fun: function () {

            }
        }

6、注釋

頻繁地使用注釋有助于他人理解你的代碼,如下情況應(yīng)當(dāng)使用注釋

  • 代碼晦澀難懂

  • 可能被誤認(rèn)為錯(cuò)誤的代碼

  • 必要但并不明顯的針對(duì)特定瀏覽器的代碼

  • 對(duì)于對(duì)象、方法或者屬性,生成文檔是有必要的(使用恰當(dāng)?shù)奈臋n注釋)

6.1 單行注釋

單行注釋單行注釋?xiě)?yīng)當(dāng)用來(lái)說(shuō)明一行或者一組相關(guān)的代碼。 單行注釋可能有如下三種使用方式

  • 獨(dú)占一行的注釋?zhuān)脕?lái)解釋下一行代碼

  • 在代碼行的尾部注釋,用來(lái)解釋它之前的代碼

  • 多行,用來(lái)注釋掉一個(gè)代碼塊

  • 對(duì)于行尾的情況,代碼和注釋間至少一個(gè)空格

        // 獨(dú)占一行的注釋
        let num = 1; // 代碼行的尾部注釋
6.2 多行注釋

多行注釋?xiě)?yīng)當(dāng)在代碼需要更多的文字去解釋的時(shí)候使用。每個(gè)多行注釋?xiě)?yīng)當(dāng)有如下三行

  • 首行僅僅包含 / 注釋開(kāi)始,該行不能有其他文件

  • 接下來(lái)的行 * 開(kāi)頭并保持左對(duì)齊。這些行可以有文字描述

  • 最后一行以 * 結(jié)束并與先前行對(duì)齊,也不應(yīng)再有其他文字

多行注釋?xiě)?yīng)當(dāng)保持同它描述的代碼一樣的縮進(jìn),后續(xù)每個(gè) * 后加一個(gè)空格

        /*
        * 這是描述
        * 這是描述
        * 這是描述
        */

7、變量聲明

所有變量在使用前都應(yīng)當(dāng)事先定義,使用一個(gè)var
未初始化值得變量在后面

8、函數(shù)聲明

函數(shù)應(yīng)當(dāng)在使用前提前定義,不是作為對(duì)象的方法的函數(shù),應(yīng)當(dāng)使用函數(shù)聲明的格式( function 聲明)

函數(shù)內(nèi)的函數(shù)聲明,應(yīng)當(dāng)在 var 聲明后,立即定義

匿名函數(shù)的自執(zhí)行

        (function () {} {})

9、命名

變量和函數(shù)命名時(shí)要小心。命名應(yīng)僅限于數(shù)字字母字符。某些情況可以使用下劃線。最好不好用美元符號(hào) ($) 和反斜杠 (\)
變量命名采用駝峰式,首字母小寫(xiě),每個(gè)單詞首字母大寫(xiě),變量名的第一個(gè)單詞應(yīng)當(dāng)是一個(gè)名詞(而非動(dòng)詞)以避免和函數(shù)混淆,不要再變量名中使用下劃線。

函數(shù)名也使用駝峰,第一個(gè)單詞應(yīng)當(dāng)是動(dòng)詞(而非名詞) ,也不要使用下劃線

構(gòu)造函數(shù)才能首字母大寫(xiě),名稱(chēng)應(yīng)當(dāng)非動(dòng)詞開(kāi)頭

常量(值不會(huì)被改變的變量)命名應(yīng)當(dāng)是全部大寫(xiě),不同單詞用下劃線隔開(kāi)

        const NUM = 1;

對(duì)象的屬性同變量的命名規(guī)則相同。對(duì)象的方法同函數(shù)的命名規(guī)則相同,如果屬性或者方法是私有(不希望別人訪司) ,應(yīng)當(dāng)在之前加一個(gè)下劃

10、嚴(yán)格模式

嚴(yán)格模式應(yīng)當(dāng)僅限在函數(shù)內(nèi)部使用,千萬(wàn)不要在全局使用。

11、賦值

當(dāng)給變量賦值時(shí),如果右側(cè)時(shí)含有比較語(yǔ)句的表達(dá)式,需要使用圓括號(hào)包裹

       let a = 2;
       let b = 2;
       let num = (a > b) ? a : b;

12、等號(hào)運(yùn)算符

使用 === (嚴(yán)格等于)和 ! == (嚴(yán)格不相等)代替 == (相等)和 != (不等)來(lái)避免弱類(lèi)型轉(zhuǎn)換錯(cuò)誤。

13、三元運(yùn)算符

三元運(yùn)算符應(yīng)當(dāng)僅僅用在條件賦值語(yǔ)句中,而不要作為 if 的替代品。

       let num = (a > b) ? a : b;

14、語(yǔ)句

14.1 簡(jiǎn)單語(yǔ)句

每行最多只包含一條語(yǔ)句。所有簡(jiǎn)單的語(yǔ)句都應(yīng)該以分號(hào)結(jié)束

14.2 返回語(yǔ)句

返回語(yǔ)句當(dāng)返回一個(gè)值的時(shí)候不應(yīng)當(dāng)使用圓括號(hào)包裹,除非在某些情況下這么做可以讓返回值更容易理解,

14.3 復(fù)合語(yǔ)句

復(fù)合語(yǔ)句時(shí)大括號(hào)括起來(lái)得語(yǔ)句列表。

  • 括起來(lái)的語(yǔ)句應(yīng)當(dāng)較符合語(yǔ)句多縮進(jìn)一個(gè)層級(jí)

  • 開(kāi)始的大括號(hào)應(yīng)當(dāng)在符合語(yǔ)句所在行的末尾;結(jié)束的大括號(hào)應(yīng)當(dāng)獨(dú)占一行且同復(fù)合語(yǔ)句的開(kāi)始保持一樣的縮進(jìn)

  • 當(dāng)語(yǔ)句是控制結(jié)構(gòu)的一部分時(shí),諸如 if 或者 for 語(yǔ)句,所有的語(yǔ)句都需要用大括號(hào)括起來(lái),也包括單個(gè)語(yǔ)句。這個(gè)約定是讓我們更加方便地添加語(yǔ)句而不用擔(dān)心忘記加括號(hào)而引起 bug

  • if 一樣的語(yǔ)句的開(kāi)始的關(guān)鍵詞,其后應(yīng)該緊跟一個(gè)空格,起始大括號(hào)應(yīng)當(dāng)在空格之后

14.3.1 if語(yǔ)句

if 語(yǔ)句應(yīng)當(dāng)是下面的格式

       if (判斷條件) {
            // 輸出
       } else {
            // 輸出
       }
14.3.2 for 語(yǔ)句

for 語(yǔ)句的初始化部分不應(yīng)當(dāng)有變量聲明

14.3.3 while 語(yǔ)句
14.3.4 switch 語(yǔ)句

如果一個(gè) switch 不包含 default 的情況,應(yīng)當(dāng)用注釋代替

        switch (key) {
            case value:
                // code
                break;
        
            case value:
                // code
                break;
        
           // 沒(méi)有default
        }

15、留白

在邏輯相關(guān)的代碼塊之間添加空行可以提高代碼的可讀性。

兩行空行雙限在如下情況中使用

  • 在不同的源代碼文件之間
  • 在類(lèi)和接口定義之間

單行空行僅限在如下情況中使用

  • 方法之間

  • 方法中局部變量和第一行語(yǔ)句中間

  • 多行或者單行注釋之前

  • 方法中邏輯代碼塊之間以提升代碼的可讀性

空格應(yīng)當(dāng)在如下情況中使用

  • 關(guān)鍵詞后跟括號(hào)的情況應(yīng)當(dāng)用空格隔開(kāi)
  • 參數(shù)列表中逗號(hào)之后應(yīng)當(dāng)留一個(gè)空格
  • 所有的除了點(diǎn) (.) 之外的二元運(yùn)算符,其操作數(shù)都應(yīng)當(dāng)用空格隔開(kāi)。單目運(yùn)算符的操作數(shù)事件不應(yīng)該用空白隔開(kāi),諸如一元減號(hào),遞增 (++) ,遞減 (-) )。
  • for 語(yǔ)句中的表達(dá)式之間應(yīng)當(dāng)用空格隔開(kāi)

16、需要避免的

  • 切勿使用像 String 一類(lèi)的原始包裝類(lèi)型創(chuàng)建新的對(duì)象。
  • 避免使用eval()
  • 避免使用 with 語(yǔ)句(其實(shí)該語(yǔ)句已經(jīng)被廢除了,所以老夫就不教你們了)

寫(xiě)在最后:風(fēng)格這種東西,有很多,就拿縮進(jìn)來(lái)說(shuō):

  • jQuery 核心風(fēng)格指南明確規(guī)定使用制表符縮進(jìn)
  • Daiglas CrockfordJavaScript 代碼規(guī)范規(guī)定使用 4 個(gè)空格字符縮進(jìn)
  • SproutCore 風(fēng)格指南規(guī)定使用2個(gè)空格縮進(jìn)
  • GoogleJavascript 風(fēng)格指南規(guī)定使用 2 個(gè)空格縮進(jìn)
  • Dojo 編程風(fēng)格指南規(guī)定使用制表符縮進(jìn)

所以啊,風(fēng)格很多,大概的了解一下,一切以你所在的團(tuán)隊(duì)風(fēng)格為準(zhǔn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容