Node編碼規範

1.縮進
採用2個空格縮進,而不是tab縮進。空格在編輯器中與字符是等寬的,而tab可能因編輯器的設置不同。2個空格會讓代碼看起來更緊湊、明快。
2.變量聲明
永遠用var聲明變量,不加var時會將其變成全局變量,這樣可能會意外污染上下文,或是被意外污染。
3.空格
在操作符前後需要加空格,比如+、-、*、%、=等操作符前後都應該存在一個空格,此外,在小括號前後應該存在空格。
4.單雙引號的使用
由於雙引號在別的場景下使用較多,在Node中使用字符串時儘量使用單引號,這樣無需轉義,如:
var html = '<a href="http://codejs.org">CNode</a>';
而在JSON中,嚴格的規範是要求字符串用雙引號,內容中出現雙引號時,需要轉義。
5.大括號的位置
一般情況下,大括號無需另起一行,如:
if (true){
//some code
}
6.逗號
逗號用於變量聲明的分隔或是元素的分隔。如果逗號不在行結尾,前面需要一個空格。此外,逗號不允許出現在行首。
7.分號
給表達式結尾添加分號。儘管JavaScript編譯器會自動給行尾添加分號,但還是會帶來一些誤解。
8.變量名
變量名都採用小駝峯式命名,即除了第一個單詞的首字母不大寫外,每個單詞的首字母都大寫,詞與詞之間沒有任何符號,如:
var adminUser = {};
9.方法命名
方法命名與變量命名一樣,採用小駝峯式命名。與變量不同的是,方法名儘量採用動詞或判定詞彙。如:
var getUser = function(){};
var isAdmin = function(){};
10.類命名
類名採用大駝峯式命名,即所有單詞的首字母都大寫。如:
function User{
}
11.常量命名
作爲常量時,單詞的所有字母都大寫,並用下劃線分割,如:
var PINK_COLOR = "pink";
12.文件命名
命名文件時,請儘量採用下劃線分割單詞,比如child_process.js和string_decode.js。如果你不想將文件暴露給其他用戶,可以約定以下劃線開頭,如_linklist.js。
13.包名
也許你有貢獻模塊並將其打包發佈到NPM上。在包名中,儘量不要包含js或node的字樣,它是重複的。包名應當適當短且有意義的,如:
var express = require('express');
14.比較操作
在比較操作中,如果是無容忍的場景,請儘量使用===代替==,否則你會遇到下面這樣不符合邏輯的結果:
'0' == 0;//true
'' == 0;//true
'0' === '';//false
此外,當判斷容忍假值時,可以無需使用===或==。在下面的代碼中,當foo是0、undefined、null、false、''時,都會進入分支:
if (!foo) {
//some code
}
15.字面量
請儘量使用{}、[]代替new Object()、new Array(),不要使用string、bool、number對象類型,即不要調用new string、new Boolean和new Number。
16.作用域
在JavaScript中,需要注意一個關鍵字和一個方法,它們是with和eval(),容易引起作用域混亂。
17.數組與對象
在JavaScript中,數組其實也是對象,但是兩者在使用時有些細節需要注意。
    1>.字面量格式
    創建對象或者數組時,注意在結尾用逗號分        隔。如果分行,一行只能一個元素,示例代碼如下:
    var foo = ['hello','world'];
    var bar = {
      hello:'world',
      pretty:'code'
      };
      2>.for in 循環
      使用for in循環時,請對對象使用,不要對數組使用,示例代碼如下:
      var foo = [];
      foo[100] = 100;
      for (var i in foo){
      console.log(i);
      }
      for (var i = 0;i < foo.length; i++){
      console.log(i);
      }
      在上述代碼中,第一個循環只打印一次,而第二個循環則打印0~100,這並不滿足預期值。
      3>.不要把數組當做對象使用
      儘管在JavaScript內部實現中可以把數組當做對象來使用,如下所示:
      var foo = [1,2,3];
      foo['hello']='world';
      這在for in迭代時,會得到所有值:
      for(var i in foo){
        console.log(foo[i]);
      }
      也許你只是想得到hello而已。
18.異步
在Node中,異步使用非常廣泛並且在實踐過程中形成了一些約定,這是以往不曾在意的點。
   1.異步回調函數的第一個參數應該是錯誤指示
   並不是所有回調函數都需要將第一個參數設計爲錯誤對象。但是一旦涉及異步,將會導致try catch無法捕捉到異步回調期的異常。將第一個參數設計爲錯誤對象,告知調用方是一個不錯的約定。示例代碼如下:
   function (err,data){
   };
    這個約定被很多流程控制庫所採用。遵循這個約定,可以享受社區流程控制庫帶來的業務編寫遍歷。
    2.執行傳入的回調函數
    在異步方法中一旦有回調函數傳入,就一定要執行它,且不能多次執行。如果不執行,可能造成調用一直等待不結束,多次執行也可能會造成未期望的後果。
19.類與模塊
關於如何在JavaScript中實現繼承,有各種各樣的方式,但在Node中我們只推薦一種,那就是類繼承的方式。另外,在Node中,如果要將一個類作爲一個模塊,就需要在意它的導出方式。
    1.類繼承
    一般情況下,我們採用Node推薦的類繼承方式,示例代碼如下:
    function Socket(options){
    //...
    stream.Stream.call(this);
    //...
    }
    util.inherits(Socket,stream.Stream);
    2.導出
    所有供外部調用的方法或變量均需掛載在exports變量上。當需要將文件當做一個類導出時,需要通過如下的方式掛載:
    module.exports = Class;
    而不是通過
    exports = Class;
    私有方法無需因爲測試等原因導出給外部,所以無需掛載。

–內容總結來自《深入淺出Nodejs》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章