-
首行缩进 (可使用代码格式化插件)
-
用var声明变量
-
用字面量声明方式
var num = 123;
var aaa = {};
var arr = [];
var isAdmin = true;
避免使用:
var obj =new Object();
var arr = new Array();
var test =new String("");
var size = new Number();
-
在循环体内不要使用var变量,使用let变量
var是函数作用域,在循环声明以后只有等函数声明周期结束这些资源才会释放.
let是块作用域,在循环声明以后循环结束释放.
for (let i = 10; i < 11; i++) {
var a = i;
}
console.log(a);
> 10
for (let i = 10; i < 11; i++) {
let a = i;
}
console.log(a);
> ReferenceError: a is not defined
-
空格在操作符前后需要加上空格,= 、% 、* 、- 、+ 前后都应该加一个空格 (可使用代码格式化插件)
-
单双引号的使用,尽量使用单引号 (只有在JSON文件中才使用双引号)
-
控制每行最长字符,每行最多80个字符
-
在同一行写大括号 (可使用代码格式化插件)
if (true) {
console.log('winning');
}
避免使用:
if (true)
{
console.log('losing');
}
-
使用首字母小写给变量属性和函数命名 (或驼峰法)
-
类名首字母大写
-
常量大写
常量应该被声明为普通变量或静态类的属性,全部使用大写字母。
-
Object / Array 声明 (使用尾随逗号)
var a = ['hello', 'world'];
var b = {
good: 'code',
'is generally': 'pretty'
};
避免使用:
var a = [
'hello', 'world'
];
var b = {"good": 'code'
, "is generally": 'pretty'
};
-
使用 === 操作符
=== 即会判断类型,又会判断结果。
1 == true
> true
1 === true
> false
0 == false
> true
0 === false
-
使用多行三元运算符 (看个人习惯)
-
不要使用自增(++)和自减(–)运算符,用+=和-=代替
-
尽量不要扩展内置对象 (即尽量不要使用prototype,除非在很多地方通用)
尽量避免如下用法:
Array.prototype.empty = function() {
return !this.length;
}
var a = [];
if (a.empty()) {
console.log('losing');
}
-
变量名尽量采用有意义的命名 (即根据变量名能够理解其代表的意义)
-
尽可能早地在函数返回值
function isPercentage(val) {
if (val < 0) {
return false;
}
if (val > 100) {
return false;
}
return true;
}
避免使用:
function isPercentage(val) {
if (val >= 0) {
if (val < 100) {
return true;
} else {
return false;
}
} else {
return false;
}
}
-
禁止使用: Object.freeze, Object.preventExtensions, Object.seal, with, eval
-
回调函数总是把err参数作为第一个变量,如果参数中有回调函数,总是放在最后
比如:callback(err, param1, param2, callback)
-
不要使用 “try … catch” ,因为nodejs都是异步操作,try catch无法捕捉回调里面的异常,除非你在回调里面也写try catch
-
采用默认参数精简代码
function writeForumComment(subject, body) {
subject = subject || 'No Subject';
body = body || 'No text';
}
使用下面方法替代
function writeForumComment(subject = 'No subject', body = 'No text') {
...
}
-
删除无效的代码
-
避免回调地狱 (即避免使用多层嵌套回调)
使用控制流程模块(如 async)
建议使用async.waterfall 和 async.parallel 解决回调问题
-
尽量不使用return,使用callback回调
无异步操作的function可使用return,有异步操作的function使用return会出现无返回值的问题.如不熟悉回调机制,建议全部使用callback回调
-
for循环体内杜绝出现异步操作
-
代码复用,保证可读性的情况下尽可能减少代码量
-
文件命名: 单词之间使用 _ 分割