編寫可維護的js代碼-編程風格筆記
1、基本格式化
縮排層級:4個空格(把tab設成4個空格) 語句結尾:保留;(雖然分析器有自動分號插入機制) 行的長度:80個字元 空行:確保語義有關聯的代碼展現在一起 命名:變數和函數遵循小駝峰命名法,小寫字母開始,後面每個單字首大寫
變數命名首碼名詞myName
函數命名首碼動詞setName()
常量MAX_COUNT大寫字母和底線
建構函式大駝峰命名法AnotherName 直接量:
字串:推薦” “,雖然和’ ‘一樣
整數和浮點數:8進位廢棄
null:Null 物件指標
初始化一個變數,這個變數可能賦值為一個對象
和一個已經初始化的變數比較,這個變數可以是也可以不是一個對象
函數的參數期望是對象時,用作參數傳入
函數傳回值期望是對象時,用作傳回值傳出
不要用null檢測是否傳入某個參數
不要用null檢測未初始化的變數
undefined:var聲明但未初始化,盡量不使用undefined,使用
var person=null;
對象:建議使用對象直接量,在直接量中直接寫出所有屬性;而非顯式建立執行個體然後添加屬性的做法。
var book={ title:"js book", author:"wang"};
數組直接量:
var numbers={1,2,3,4};
2、注釋
單行注釋:
//好的寫法if (condition) { //注釋 allowed();}
注釋前有空行。
代碼尾部注釋,代碼結束到注釋間至少有一個縮排。
多行注釋:推薦java風格
if (condition){/* * 注釋 * 注釋 */ allowed();
注釋之上有空行
*號之後有空格
難於理解的代碼,可能被誤認為錯誤的代碼,hack推薦添加註釋
方法,建構函式,包含文檔化方法的對象推薦加文檔注釋
3、語句和運算式
塊語句推薦使用{}包裹
if for while do…while try…catch…finally
{}推薦使用java風格
if (condition) { doSomething();} else { doSomethingElse();}
switch語句
switch(condition) { case "first": //代碼 break; case "second": case "third": //代碼 break; case "fourth": //代碼 break; //沒有default
每條case語句相對於switch縮排一個層級
第二條case語句開始,每條case語句前後各有一個空行
case語句連續執行緊鄰
defau語句不用時注釋
with語句:避免使用 for迴圈:中斷,continue ,break,經常遍曆數群組成員 for-in迴圈:遍曆對象屬性,返回屬性名稱,不能遍曆數群組成員
4、變數函數和運算子
js編程的本質是編寫一個個函數來完成任務,好像js即可以物件導向,又可以面向過程,還可以函數式編程。
變數聲明:變數的聲明提前,函數內部任意地方定義變數和在函數頂部定義變數是完全一樣的,但推薦都放在頂部 函式宣告:同樣函式宣告也會提前
推薦函式宣告在使用前
函式宣告不推薦在語句塊內
內部局部函式宣告建議緊跟變數聲明之後 匿名函數,推薦函式宣告被()包裹
var value = (function() { // return { message: "hi" }}());
推薦局部使用strict 模式 強制類型轉換:== !=會強制類型轉換,推薦=== !== eval() 將傳入的字串當代碼來執行,禁止在封閉的範圍中使用它建立新變數和函數 原始包類型:String,Boolean,Number,每種類型代替全域範圍中的一個建構函式,並對應原始值的對象,原始包類型主要是讓原始值具有對象般的行為。String是字串,是原始類型,可以使用方法,原因是方法調用時建立新的執行個體,但使用後新執行個體銷毀了。 不推薦手動建立這些對象
var name=new String("wang"); //不推薦