1、减少全局变量的污染
定义全局变量的三种方式:
(1)在任何函数外面直接执行 var 语句。 var f = 'value';
(2)直接添加一个属性对全局对象上。 window.f = 'value';
(3)直接使用为经生命的变量,以这种方式定义的全局变量被称为隐式的全局变量。 f = 'value';
2、注意特殊类型的特殊性
(1)防止浮点数溢出 num = 0.1 + 0.2; // 0.300000000000004
(2)剩用 JavaScript 类型自动转换
(3)正确监测数据类型
(4)避免误用 parseInt
parseInt("123abc") // 123
parseInt("1.73") // 1
parseInt(".123") // NaN
3、谨慎使用运算符
(1)用 ===, 而不用 ==
(2)小心逗号运算符
var a = ( 1, 2, 3, 4); alert(a); // 4
(3)警惕运算符的副作用
var a = 0;console.log(a++); // 0
var a; a = 0; a++; console.log(a); // 1
4、不用滥用 eval,避免使用width,continue
5、推荐使用提高循环性能的策略
(1)避免长度的多次计算
(2)倒序循环可以略微提高循环性能
6、少用函数迭代
总结: 尽管基于函数的迭代使用起来非常便利,但是比基于循环的迭代要慢一些。每个数组项要关联额外的函数调用是造成速度慢的主要原因,
基于函数的迭代占用时间是基于循环迭代的8倍,因此在非特殊需求下,不建议使用函数迭代。
7、推荐提高条件性能的策略
总结:在多数情况下,seitch 比 if 运行要快,从性能方面考虑,如果条件较少,应使用if,如果条件较多,应使用switch.
一般来说,if 适用于判断两个离散或几个不同的值域或几个不用的值域。如果判断多于两个离散值,那么 switch 将是更理想的选择。
8、优化 if 逻辑
if 优化目标: 最小化找到正确分支之前所判断条件体的数量。if 优化方法:将常见的条件体放在首位。
9、小心 if 隐藏的 Bug
if(a = 1){
alert(a); //表达式合法,Bug很难发现
}
可以把常量放在前面,从而能够及时发现这个 Bug 。例如:
if(1 = a){
alert(a);
}
10、准确适用循环体
(1)for 循环
(2)while 循环
(3)do{} while()
(4)for in
总结:前三种循环比 for in 速度快7倍之多。
for 循环和 while 循环比较时,for循环比较应用于 简单数值迭代操作。
如果循环体,再次出现条件判断,执行复杂条件时效率会大大降低。
一般来说,在循环结构中动态改变循环变量的值时,建议使用 while 结构,而对于静态的循环变量,则可以考虑使用 for 结构。
11、使用递归模式