Javascript Best Practices

[1] http://www.thinkful.com/learn/javascript-best-practices-1/

[2] http://www.zhangxinxu.com/wordpress/?p=1173

 

新名词:JSLint

 

记录自己平时不太清楚的部分,包括知道问题不知道解决方案,以及不知道问题的部分。 

1.  全局变量

问题:

  * 命名冲突导致变量被覆盖 

解决: 

  * 使用闭包和模块模式(module pattern)[1]

  * 命名空间模式[2] 或 

函数立即自动执行

      + 隐式全局变量 

 

         - 记得始终使用var来声明变量;使用链分配而不是任务链声明变量, 不要使用var a=b=0; 可以使用var a, b;

         - 通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的;无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的

 

 

     2. 单var形式

    问题:

      * 程序内部存在不同程度的声明,可读性不强,不易于维护

    解决: 

      * "使用一个var语句声明多个变量,并以逗号分隔。像这种初始化变量同时初始化值的做法是很好的。这样子可以防止逻辑错误(所有未初始化但声明的变量的初始值是undefined)和增加代码的可读性。" [2]

     

    3.  var散布的问题hoisting: a problem with scattered vars 

    问题:

      * JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析)。对于JavaScript,只 要你的变量是在同一个作用域中(同一函数),它都被当做是声明的,即使是它在var声明前使用的时候。)[2]

    解决:  

      * 预先声明你想使用的全部变量
     

    4. for循环

    问题: 每次循环时数组的长度都要重新获取,降低性能

    解决:

      * 循环数组或对象的值时,缓存数组或集合的长度。[2]

    for (var i = 0, max = myarray.length; i < max; i++) {
    //code
    }
    /第一种变化的形式:

    var i, myarray = [];
    for (i = myarray.length; i–-;) {
    // 使用myarray[i]做点什么
    }

    //第二种使用while循环:

    var myarray = [],
    i = myarray.length;
    while (i–-) {
    // 使用myarray[i]做点什么
    }
      * 使用i=i+1 或 i+=1来替换i++[2]

     

     

    5. for-in循环(也被称为“枚举”)[2]
    问题: 循环对象或内容不确定,导致循环内容错误

    解决: 采用hasOwnProperty() 

     

     

     

    6. 不要扩展内置原型 Augmenting built-in prototypes [2]

    问题: 维护性差, 属性添加到原型中,如果不使用hasOwnProperty() 会导致循环混乱

    解决: 不增加内置原型

    (没懂) 

     

    7.  switch模式,代码风格

     

    8. 避免隐式类型转换 avoiding implied typecasting

    问题: 变量比较时隐式类型转换会导致结果出错 

    解决: 比较值和表达式类型的时候始终使用===和!==操作符

     

    9.  避免eval()[2]

    问题: eval()方法接受任意的字符串,并当做javascript代码来处理。 "evals()是魔鬼"; 安全隐患;

    解决: 用方括号表示法来访问动态属性会更好更简单; 使用new Function()代替; 封装eval()调用到一个即时函数中。

     

    10. parseInt()下的数值转换

    问题: 基数参数省略,导致意外结果

    解决: 将字符串转换成数字 

     

    11. 分割单词 

    构造函数:upper camel case

    其余函数: lower camel case

    变量: lower camel case or underline 

     

     

     

     

    posted on 2013-09-08 11:19  wxb007  阅读(309)  评论(0编辑  收藏  举报