今天看了《编写高质量的javascript》的第一部分,总结了一些javascript的编码规范。

一、格式化

1.使用4个空格来缩进层级。

 注:由于有些操作系统或编译环境对于tab(制表符)的处理不尽相同,而空格无差异,所以使用空格来进行缩进。

2.每条语句的结尾都应加分号。

 注:红宝书中也说过,为了防止压缩错误,最好不要省略。

3.每行的长度不应该超过80个字符。

4.若长度超过限制,可以在运算符后换行。

5.空行:方法和方法之间需要空行,方法和局部变量之间需要空行,注释之前需要空行,逻辑片段之间需要空行。eg:           

if (wl && wl.length) {
    
    //方法和方法之间的空行
    for (var i = 0; i < wl.length; i ++) {
        p = wl[i];
        type = Y.Lang.type(r[p]);
   
        //方法和局部变量之间的空行
        if (s.hasOwnProperty(p)) {
            
            if (merge && type == "object") {
                Y.mix(r[p],s[p]);
            } else {
                r[p] = s[p];
            }
        }
    }  
}

6.变量和函数采用小驼峰式命名,变量前缀是名词,函数前缀是动词。

7.常量采用全大写+下划线格式。eg:MAX_HEIGHT

8.构造函数采用大驼峰式命名。

9.字符串用双引号。

10.创建对象和数组时,使用字面量创建。

  注:红宝书中提及,使用字面量创建对象和数组不会创建相应的构造函数。

二、注释

1.应该只在代码不清晰的时候才需要注释,避免多余的注释。

2.应采用工具来生成注释文档。eg:JSDoc

三、语句和表达式

1.开始花括弧放在块语句第一句代码的末尾。

  注:为了防止ASI(Automatic Semicolon Insertion 自动插入分号)机制自动插入错误的分号。

2.所有块语句都应加花括弧

3.switch语句的case语句应该有缩进,在有注释的情况下可以连续的执行case语句,在有注释的情况下可以省略default语句。

4.不使用with语句

  注:红宝书中提及使用with语句会创建一个新的作用域,看似方便的开发者的编写代码,实则很大的降低了效率。

5.for循环最好不使用continue语句,大部分情况下都可用条件语句来替换continue。

6.for-in循环需要在循环体使用hasOwnProperty()来筛掉原型属性。

  注:for-in遍历的是对象属性,不仅遍历对象的实例属性,还遍历从原型继承来的属性。

四、变量、函数和运算符

1.变量声明采用一个var 的单独声明语句,带有赋值的在前,仅是声明的在后。

  注:注意每个语句使用逗号进行分隔。

2.函数声明,函数内部的局部函数要在变量声明之后声明。

  注:虽然不管是变量还是函数,javascript引擎都会把声明语句提前,但是为了养成良好习惯,还是应该要在调用之前声明。

3. 立即执行函数应该使用IIFE

4.避免在全局使用严格模式,应该在函数内部使用。

  注:如果在一个文件中使用了全局严格模式,那么所有js代码全部会采用全局严格模式进行验证。

5.应该尽量避免使用eval()方法。

  注:eval()方法是动态执行其中字符串(可能是js脚本)的,这样很容易会造成系统的安全问题。

 五、UI松耦合

 将html、css、javascript片段都区分开来,降低对其他文件的依赖。

六、避免使用全局变量

1.使用IIFE成为自执行匿名函数,减少全局变量。

2.模块化代码,创建命名空间或接口来让变量挂载。

七、事件处理

1.隔离应用逻辑、事件处理、用户操作。

2.事件处理函数应该为接触到event的唯一函数,将需要的event属性拆分,只传递需要的参数给应用逻辑函数。

八、避免“空比较”

九、分离配置数据 

可以通过工具生成具体格式的配置数据

十、定义错误集

十一、