《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文档