【javascript模式】Chapter2: 基本 技巧
1 尽量少用全局变量,最好一个应用程式只有一个全局变量
隐含全局变量(不使用var声明)与明确定义的全局变量区别:
(1)使用var创建的全局变量(在函数外部声明)不能用delete删除
(2)不使用var创建的隐含全局变量可以删除
这表明隐含全局变量严格来讲并不是真正的变量,而是全局对象的属性,属性可以通过delete操作符删除,但是变量不可以
2 获取全局对象
var global = (function() {
return this;
})
3 单一var模式: 只是用一个var在函数顶部进行变量声明,是一种很有用的模式
使用一个var关键字声明由逗号分开的多个变量,同时初始化变量
var a=1,b=2,sum=a+b,myobject={};
4 "提升": javascript中,只要变量是在同一个范围(同一函数)里, 就视为已经声明,哪怕是在变量声明前就是用,无论在哪里,效果等同于在函数顶部声明。
在每个函数中仅仅使用一个var变量声明,这有助于在一个地方查看所有变量,可以有效防范变量提升导致的错误。
5 HTMLCollection是实时的,动态的,因此使用for循环的时候,最好是将数组的长度缓存起来
for (var i=0, max=myarray.length; i<max; i++ )
逐步减少至0,这样通常更快,同0比较比同数组长度的比较更有效率
6 for-in循环应该用来比较非数组对象,因为他会将原型中的属性也会枚举出来,即对象的全部属性
当遍历对象属性来过滤遇到原型链的属性是,可以使用hasOwnProperty()来判断。他不包含原型链中的属性
- for(var i in man) {
- if(man.hasOwnProperty(i)) {
- man[i]
- }
- }
另一种方法,使用Object.prototype.hasOwnProperty.call(man,i);
7 使用 === !==
8 避免使用eval
9 parseInt,每次使用需要指定进制参数
另一种将字符串转换成数字的办法,Number("08"),这种方法比parseInt快很多,parseInt是解析而不是简单得转换,“08 hello”,出parseInt返回一个数值外,其他方法都会失败并返回“NaN”