編寫可維護的JavaScript

語句和表達式

全部的塊語句都應當使用花括號。包括:數組

  • if函數

  • forcode

  • while對象

  • do…while…ip

  • try…catch…finally作用域

//很差的寫法
if (condition)
    doSomethind();
//很差的寫法
if (condition) doSomething();
//好的寫法
if (condition) {
    doSomethind();
}
//很差的寫法
if (condition) { doSomething(); }

花括號的對齊方式

兩種風格:第一種將花括號放置在塊語句中第一行代碼的末尾;第二種將左花括號放置於塊語句首行的下一行。字符串

塊語句間隔

  • 語句名、圓括號、和左花括號之間沒有空格間隔it

    if(condition){io

    doSomething();

    }console

  • 在左圓括號以前和右圓括號以後各添加一個空格

    if (codition) {

    doSomething:

    }

  • 在左圓括號後和右圓括號前各添加一個空格

    if ( condition ) {

    doSomething();

    }

我的比較喜歡第二種,易讀但不是太麻煩。

switch語句

縮進

Java風格:

switch (condition) {
    case "first":
        //code
        break;
    case "second":
        //code
        break;
    default:
        //code
}

每條case語句相對於switch關鍵字都縮進一個層級
從第二條case語句開始,每條case語句先後都各有一個空行。

Dojo風格:

switch (condition) {
case "first":
    //code
    break;
case "second":
    //code
    break;
default:
    //code
}

default
不少人認爲不論什麼時候都不該當省略default,哪怕default什麼都不作。
我的不太喜歡寫。

with語句

我們就儘可能不要寫with語句了。

for-in循環

最好使用hasOwnProperty()方法來爲for-in循環過濾出實例屬性。

var prop;
for (prop in object) {
    if(object.hasOwnProperty(prop)) {
        console.log("...");
    }
}

不要把for-in用在數組的遍歷上

//很差的寫法
var vaules = [1, 2, 3],
    i;
for (i in vaules) {
    process(item[i]);
}

變量、函數和運算符

變量聲明

建議將局部變量的定義做爲函數內第一條語句。

function doSomethingWithItems(items) {
    
    var i, len;
    var value = 10;
    var result = value + 10;
    for (i=0, len=items.length; i < len; i++) {
        doSomething(items[i]);
    }
}

函數聲明

推薦先聲明JavaScript函數而後使用函數。

function doSomething() {
    //code
}
doSomething();

此外,函數聲明不該出如今語句塊以內。
//很差的寫法

if (condition) {
    function doSomething() {
        //code
    }
} else {
    function doSomething() {
        //code
    }
}

函數調用間隔

推薦風格:在函數名和左花括號之間沒有空格。

//好的寫法
doSomething(item);
//很差的寫法:看起來想一個塊語句
doSomething (item);

當即調用的函數

匿名函數能夠經過在最後加上一對圓括號來當即執行並返回一個值,而後將這個值賦值給變量。

// 很差的寫法
var value = function() {
    // 函數體
    return {
        message: "Hi"
    }
}();

爲了讓當即執行的函數可以被一眼看出來,能夠將函數用一對圓括號包裹起來。

// 好的寫法
var value = (function() {
    // 函數體
    return {
        message: "Hi"
    }
}());

嚴格模式

最好不要再全局做用域中使用"use strict"。

// 很差的寫法 - 全局的嚴格模式
"use strict";
function doSomething() {
    // code
}
// 好的寫法
function doSomething() {
    "use strict";
    // code
}

相等

推薦不要使用 == 和 !=,而應當使用 === 和 !==。

eval()

通用原則:嚴禁使用Function,只在別無他法時使用eval()。setTimeout()和setInterval()也是可使用的,但不用字符串形式而要用函數。
ECMAScript 5 嚴格模式對於eval()有着嚴格的限制,禁止在一個封閉的做用域中使用它建立變量或者函數。

原始包裝類型

JavaScript裏有三種原始包裝類型:String、Boolean和Number。每種類型都表明全局做用域中的一個構造函數,並分別表示各自對用的原始值的對象。

// 很差的作法
var name = new String("Nicholas");
相關文章
相關標籤/搜索