编写可维护的JavaScript
结合自己的代码习惯给出推荐的代码风格
一、格式化
- 缩进4个空格
- 语句结尾分号不要省略
- 行的长度不要超过80
- 超长换行时,在运算符后换行,下一行增加两个层级的缩进;
callAFuction(document, element, window, “some string value”, true, 123,
navigator);
如果是赋值,则保持第二行位置与赋值运算符位置对齐
Var result = something + anotherThing + yetAnotherThing + somethingElse +
anotherSomethingElse;
- 空行
在方法之间;在方法中的局部变量和第一条语句之间;在多行或单行注释之前;在方法的逻辑片段之间
插入空行,提高可读性。
二、命名
- 变量函数:小驼峰式命名, 变量尽量短但要有语义,在名字中体现数据类型,比如count, length, size表示数字类型,name, titile, message表示字符串,i, j, k表示循环变量,避免用foo, bar, tmp此类无意义的命名;函数和方法可用动词表示,比如一些常见前缀can, has, is, get, set;
if (isEnabled()) {
setName(“Nicholas”);
}
If (getName() === “Nicholas”) {
doSomething();
}
- 常量,使用大写字母和下划线命名,比如MAX_COUNT, URL
- 构造函数,大驼峰命名
三、注释
- 代码很清晰时无需注释
- 难理解的代码加注释
- 可能被误会是错误时加注释
四、块语句
if (condition) {
doSomething();
}
- if后的空格
- 即使一行代码也不要省掉{}
- {跟在if的一行
- 缩进与分号
五、循环
- 推荐for循环中尽量用if语句来代替continue的逻辑,更易阅读
- for-in循环是用来遍历对象的,不该用来遍历数组
六、变量、函数和运算符
- 推荐将所有的变量声明放在函数顶部而不是散落在各个角落
- 不推荐在函数内声明函数
- 不推荐在语句块内声明函数
- doSomething (item); 不推荐,看起来像一个块语句while (item) {…
七、分离html/css/javascript
- 不要用Css表达式
- 不要在html里写内联Javascript
- 不要在javascript中修改css属性,可以修改classname
- 不要在javascript中直接修改html,可用模板定义
八、尽量少使用全局变量
九、避免用空比较value !== null
用*typeof, instanceof, Object.prototype.toString.call(value)*来检测值
十、将配置数据从代码中分离出来
- URL
- 需要展现给用户的字符串
- 重复的值
- 设置(比如每页的配置项)
- 任何可能发生变更的值