《JavaScript模式》的讀書筆記,個人向!
更新進度隨我的閱讀進度
基本技巧
盡量少用全局變量
- 防止變量污染
- 注意JS變量提升問題
- 盡量使用單一var模式,只使用一個var在函數頂部進行變量聲明
function fun () {var a =1,b=2,sum = a+b,函數體//}
for循環優化
- 循環條件優化
for(var i=0; i<myarry.length; i++){//對array[i]進行操作
}
上面那種循環,將marry.length作為循環條件,每次循環時都要訪問數據的長度,會使代碼變慢,尤其是當條件為HTML容器對象時,每次循環都回去訪問DOM,而DOM查詢操作是非常慢的,優化方法就是將已循環過的條件緩存起來
//這種方式,對長度只提取一次
for(var i=0, max=myarry.length; i<max; i++){//對array[i]進行操作
}//也可以結合剛才的單一var 模式
var myarry=[],max=myarry.length,i=0for(i; i<max; i++){}
2、用i++替代 i=i+1, i+=1
這樣替代的好處是1、使用了最少的變量 2、逐步減至0因為跟0比較比跟數組長度比較更有效率
優化代碼
var myarr=[],i=myarr.lengthwhile(i--){//操作}
for-in循環
- 推薦使用,for循環來遍歷數組,用for-in循環來遍歷對象
- hasOwnProperty()過濾原型鏈屬性
var man = {hands:2,legs:2,head:1
},
i=0
Object.prototype.clone='zhang'for(i in man){if(man.hasOwnProperty(i)){console.log(i,":",man[i]);}
}
//這樣子就在循環的時候過濾掉了繼承屬性了
hasOwnProperty(),并不常用,當確認不了對象的內容時可以用上它進行安全檢查
switch模式
switch(n)
{
case 1:執行代碼塊 1break;
case 2:執行代碼塊 2break;
default:result = "unknow"
}
- 保持縮進整齊
- 每個case語句結尾有一個break語句
- 用default作為switch的結尾,當所有case不匹配時給出一個默認結尾
不要增加內置的原型
盡量不要對內置構造函數(Object(),Array()等)增加原型
避免使用隱式類型轉換
JS中在使用比較語句時會進行隱式類型轉換,別如‘false==0’會返回true
在使用比較語句的時候使用'==='和'!==='來進行比較
parseInt()
parseInt()第二個參數是進制參數,通常可以省略,但最好不要省略,因為該函數在解析0開頭的字符串的時候會按8進制來解析
var year="09";
year=parseInt(year,10) // return 9
// parseInt(year)返回值是0//如果是純數字字符串,可以用下面兩種方法轉換
+'08' //結果是8
Number('08') //結果是8
// 如果不是純數字字符串,只能用paeseInt()來解析,其它方法都將反回NAN
用注釋生成API文檔
JS有兩個開源的工具來用注釋生成API文檔,分別是JSDoc Toolkit和YUIDoc
根據這兩工具所規定的格式來寫注釋代碼,就能夠生成API文檔