今天看了《编写高质量的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脚本)的,这样很容易会造成系统的安全问题。