寫做本文旨在加深本身印象,也爲了更多人的瞭解到JS編碼風格,提升本身的編碼質量 想了解更多的內容請閱讀《編寫可維護的JavaScript》html
// 好的寫法
if (true) {
doSomething();
}
複製代碼
// 好的寫法
doSomething(argument1, argument2, aegument3, argument4,
argument5);
// 很差的寫法:第二行只有4個空格的縮進
doSomething(argument1, argument2, aegument3, argument4,
argument5);
// 很差的寫法:在運算符以前換行
doSomething(argument1, argument2, aegument3, argument4
, argument5);
複製代碼
// 好的寫法
var name = "Nicholas";
// 很差的寫法: 單引號
var name = 'Nicholas';
// 很差的寫法: 字符串結束以前換行
var longString = "Here's the story, of a man \ named Brady.";
複製代碼
// 好的寫法
var count = 10;
// 好的寫法
var price = 10.0;
var price = 10.00;
// 好的寫法
var num = 0xA2;
// 好的寫法
var num = 1e23;
// 很差的寫法: 十進制數字以小數點結尾
var price = 10.;
// 很差的寫法: 十進制數字以小數點開頭
var price = .1;
// 很差的寫法: 八進制 (base 8) 寫法已廢棄
var num = 010;
複製代碼
// 好的寫法
var person = null;
// 好的寫法
function getPerson() {
if (condition) {
return new Person("Nicholas");
} else {
return null;
}
}
// 好的寫法
var person = getPerson();
if (person != null) {
doSomething();
}
// 很差的寫法: 和一個未被初始化的變量比較
var person;
if (person != null) {
doSomething();
}
// 很差的寫法: 經過測試判斷某個參數是否傳遞
function doSomething(arg1, arg2, arg3, arg4) {
if (arg4 != null) {
doSomethingElse();
}
}
複製代碼
// 好的寫法
if (typeof variable == "undefined") {
// do something
}
// 很差的寫法: 使用了 undefined 直接量
if (variable == undefined) {
// do something
}
複製代碼
// 好的寫法
var found = (values[i] === item);
// 好的寫法
if (found && (count > 10)) {
doSomething();
}
// 好的寫法
for (i = 0; i < count; i++) {
process(i);
}
// 很差的寫法: 丟失了空格
var found = (values[i]===item);
// 很差的寫法: 丟失了空格
if (found&&(count>10)) {
doSomething();
}
// 很差的寫法: 丟失了空格
for (i=0; i<count; i++) {
process(i);
}
複製代碼
// 好的寫法
var found = (values[i] === item);
// 好的寫法
if (found && (count > 10)) {
doSomething();
}
// 好的寫法
for (i = 0; i < count; i++) {
process(i);
}
// 很差的寫法: 左括號以後有額外的空格
var found = ( values[i] === item);
// 很差的寫法: 右括號以前有額外的空格
if (found && (count > 10) ) {
doSomething();
}
// 很差的寫法: 參數兩邊有額外的空格
for (i = 0; i < count; i++) {
process( i );
}
複製代碼
// 好的寫法
var object = {
key1: value1,
key2: value2,
func: function() {
// doSomething
},
key3: value3
};
// 很差的寫法:不恰當的縮進
var object = {
key1: value1,
key2: value2
};
// 很差的寫法:函數體周圍缺乏空行
var object = {
key1: value1,
key2: value2,
func: function() {
// doSomething
},
key3: value3
};
複製代碼
// 好的寫法
doSomething({
key1: value1,
key2: value2
});
// 很差的寫法:全部代碼在一行上
doSomething({ key1: value1, key2: value2 });
複製代碼
// 好的寫法
if (condition) {
// 若是代碼執行到這裏,則代表經過了全部安全性檢查
allowed();
}
// 很差的寫法:註釋以前沒有空行
if (condition) {
// 若是代碼執行到這裏,則代表經過了全部安全性檢查
allowed();
}
// 很差的寫法:錯誤的縮進
if (condition) {
// 若是代碼執行到這裏,則代表經過了全部安全性檢查
allowed();
}
// 很差的寫法:這裏應當使用多行註釋
// 接下來的這段代碼很是難,那麼,讓我詳細的解釋一下
// 這段代碼的做用氏首先判斷條件是否爲真
// 只有爲真時纔會執行。這裏的條件是經過
// 多個函數計算出來的,在整個會話生命週期內
// 這個值氏能夠被修改的
if (condition) {
// 若是代碼執行到這裏,則代表經過了全部安全檢查
allowed();
}
複製代碼
// 好的寫法
var result = something + somethingElse; // somethingElse will never be null
// 很差的寫法: 代碼和註釋間沒有足夠的空格
var result = something + somethingElse;// somethingElse will never be null
複製代碼
// 好的寫法
// if (condition) {
// doSomething();
// }
複製代碼
/*
註釋開始。該行不該當有其餘文字*
開頭並保持左對齊。這些能夠有文字描述*/
開頭並同先前行保持對齊。也不該有其餘文字*
字符的對齊)。每個多行代碼以前應當預留一個空行// 好的寫法
if (condition) {
/*
* 若是代碼執行到這裏
* 說明經過了全部的安全檢測
*/
allowed();
}
// 很差的寫法: 註釋以前無空行
if (condition) {
/*
* 若是代碼執行到這裏
* 說明經過了全部的安全檢測
*/
allowed();
}
// 很差的寫法: 星號後沒有空格
if (condition) {
/*
*若是代碼執行到這裏
*說明經過了全部的安全檢測
*/
allowed();
}
// 很差的寫法: 錯誤的縮進
if (condition) {
/*
* 若是代碼執行到這裏
* 說明經過了全部的安全性檢測
*/
allowed();
}
// 很差的寫法: 代碼尾部註釋不要用多行註釋格式
var result = something + somethingElse; /*somethingElse 不該當取值爲null*/
複製代碼
// 好的寫法
// TODO: 我但願找到一種更快的方式
doSomething();
// 好的寫法
/*
* HACK: 不得不針對 IE 作的特殊處理. 我計劃後續有時間時
* 重寫這部分. 這些代買可能須要在 v1.2 版本以前替換掉
*/
if (document.all) {
doSomething();
}
// 好的寫法
// REVIEW: 有更好的方法嗎?
if (document.all) {
doSomething();
}
// 很差的寫法: 註釋聲明空格不正確
// TODO : 我但願找到一種更快的方式
doSomething();
// 很差的寫法: 代碼和註釋應當保持一樣的縮進
// REVIEW: 有更好的方法嗎?
if (document.all) {
doSomething();
}
複製代碼
// 好的寫法
var count = 10,
name = "Nicholas",
found = false,
empty;
// 很差的寫法: 不恰當的初始化賦值
var count = 10,
name = "Nicholas",
found= false,
empty;
// 很差的寫法: 錯誤的縮進
var count = 10,
name = "Nicholas",
found = false,
empty;
// 很差的寫法: 多個定義寫在一行
var count = 10, name = "Nicholas",
found = false, empty;
// 很差的寫法: 未初始化的變量放在最前面
var empty,
count = 10,
name = "Nicholas",
found = false;
// 很差的寫法: 多個 var 表達式
var count = 10,
name = "Nicholas";
var found = false,
empty;
複製代碼
// 好的寫法
function doSomething(arg1, arg2) {
return arg1 + arg2;
}
// 很差的寫法: 第一行不恰當的空格
function doSomething (arg1, arg2) {
return arg1 + arg2;
}
// 很差的寫法: 函數表達式
var doSomething = function doSomething(arg1, arg2) {
return arg1 + arg2;
}
// 很差的寫法: 左側的花括號位置不對
function doSomething(arg1, arg2)
{
return arg1 + arg2;
}
// 錯誤的寫法: 使用了 Function 構造器
var doSomething = new Function("arg1", "arg2", "return arg1 + arg2")
複製代碼
// 好的寫法
function outer() {
var count = 10,
name = "Nicholas",
found = false,
empty;
function inner() {
// 代碼
}
// 調用 inner() 的代碼
}
// 很差的寫法: inner 函數的定義先於變量
function outer() {
function inner() {
// 代碼
}
var count = 10,
name = "Nicholas",
found = false,
empty;
// 調用 inner() 的代碼
}
複製代碼
// 好的寫法
object.method = function() {
// 代碼
};
// 很差的寫法: 不正確的空格
object.method = function () {
// 代碼
};
複製代碼
// 好的寫法
var value = (function() {
// 函數體
return {
message: "Hi"
}
}());
// 很差的寫法: 函數調用外層沒有用圓括號包裹
var value = function() {
// 函數體
return {
message: "Hi"
}
}();
// 很差的寫法: 圓括號位置不當
var value = (function() {
// 函數體
return {
message: "Hi"
}
})();
複製代碼
// 好的寫法
var flag = (i < count);
// 很差的寫法:遺漏圓括號
var flag = i < count;
複製代碼
// 好的寫法
var accountNumber = "2312";
// 很差的寫法:大寫字母開頭
var AccountNumber = "2312";
// 很差的寫法:動詞開頭
var getAccountNumber = "2312";
// 很差的寫法:使用下劃線
var account_number = "2312";
複製代碼
// 好的寫法
function doSomething() {
// 代碼
}
// 很差的寫法:大寫字母開頭
function DoSomething() {
// 代碼
}
// 很差的寫法:名詞開頭
function something() {
// 代碼
}
// 很差的寫法:使用下劃線
function do_something() {
// 代碼
}
複製代碼
動詞 | 含義 |
---|---|
can | 函數返回一個布爾值 |
has | 函數返回一個布爾值 |
is | 函數返回一個布爾值 |
get | 函數返回一個非布爾值 |
set | 函數用來保存一個值 |
if (isEnabled()) {
setName("Nicholas");
}
if (getName() === "Nicholas") {
doSomething();
}
複製代碼
// 好的寫法
function MyObject() {
// 代碼
}
// 很差的寫法:小寫字母開頭
function myObject() {
// 代碼
}
// 很差的寫法:使用下劃線
function my_object() {
// 代碼
}
// 很差的寫法:動詞開頭
function getMyObject() {
// 代碼
}
複製代碼
// 好的寫法
var TOTAL_COUNT = 10;
// 很差的寫法:駝峯形式
var totalCount = 10;
// 很差的寫法:混合形式
var total_COUNT = 10;
複製代碼
// 好的寫法
var object = {
_count: 10,
_getCount: function() {
return this._count;
}
}
複製代碼
// 很差的寫法:全局使用嚴格模式
"use strict";
function doSomething() {
// 代碼
}
// 好的寫法
function doSomething() {
"use strict";
// 代碼
}
複製代碼
// 好的寫法
(function() {
"use strict";
function doSomething() {
// 代碼
}
function doSomethingElse() {
// 代碼
}
}());
複製代碼
// 好的寫法
var same = (a === b);
// 好的寫法
var same = (a == b);
複製代碼
// 好的寫法
var value = condition ? value1 : value2;
// 很差的寫法: 沒有賦值, 應當使用 if 表達式
condition ? doSomething() : doSomethingElse;
複製代碼
// 好的寫法
count++;
a = b;
// 很差的寫法:多個表達式寫在一行
count++; a = b;
複製代碼
return;
return collection.size();
return (size > 0 ? size : defaultSize);
複製代碼
if (condition) {
statements
}
if (condition) {
statements
} else {
statements
}
if (condition) {
statements
} else if (condition) {
statements
} else {
statements
}
複製代碼
// 好的寫法
if (condition) {
doSomething();
}
// 很差的寫法:不恰當的空格
if (condition){
doSomething();
}
// 很差的寫法: 遺漏花括號
if (condition)
doSomething();
// 很差的寫法:全部代碼都在一行
if (condition) { doSomething(); }
// 很差的寫法:全部代碼都在一行且沒有花括號
if (condition) doSomething();
複製代碼
for (initialization; condition; update) {
statements
}
for (variable in object) {
statements
}
複製代碼
// 好的方法
var i,
len;
for (i=0, len=0; i < len; i++) {
// 代碼
}
// 很差的寫法:初始化時候聲明變量
for (var i=0, len=0; i < len; i++) {
// 代碼
}
// 很差的寫法:初始化時候聲明變量
for (var prop in object) {
// 代碼
}
複製代碼
while (condition) {
statements
}
複製代碼
do {
statements
} while (condition);
複製代碼
switch (expression) {
case expression:
statements
default:
statements
}
複製代碼
// 好的寫法
switch (value) {
case 1:
/* falls through */
case 2:
doSomething();
break;
case 3:
return true;
default:
throw new Error("Some error");
}
複製代碼
// 好的寫法
switch (value) {
case 1:
/* falls through */
case 2:
doSomething();
break;
case 3:
return true;
default:
// 沒有default
}
複製代碼
try {
statements
} catch (variable) {
statements
}
try {
statements
} catch (variable) {
statements
} finally {
statements
}
複製代碼