今天看了《编写高质量的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属性拆分,只传递需要的参数给应用逻辑函数。
八、避免“空比较”
九、分离配置数据
可以通过工具生成具体格式的配置数据
十、定义错误集
十一、