参考 node-style-guide
参考 style.md
2个空格的缩进
使用2个空格进行缩进,永远也不要使用混合的tab和空格作为缩进。
换行
使用Unix风格的换行,每行结尾以(\n)结束,永远不要使用Windows的换行符(\r\n)。
无拖尾空白
永远也不要在一行后面留空格,在提交之前,你要像每顿饭刷牙一样清理你的JS文件。否则,腐烂的气味会驱走贡献者或同事。
使用分号
根据科学研究,分号的使用是我们社会的核心价值。考虑一下反对派的观点 ,但是我们需要传统,不要滥用纠错机制(省略分号)。
注* 在JavaScript中前置逗号代码风格和省略分号一直存在争论。
每行最多80个字符
每行最多80个字符。是的,屏幕在最近几年越来越大,但是你的脑子没怎么变,你可以使用多余的空间用来分屏。
使用单引号
只有在JSON文件中才使用双引号
Right:
var foo = 'bar';
Wrong:
var foo = "bar";
注* 为什么? JavaScript中包含双引号的字符串几乎到处都是,这样你就不需要转义了。
在同一行写大括号
Right:
if (true) {
console.log('winning');
}
Wrong:
if (true)
{
console.log('losing');
}
同样,注意在条件前后都加个空格。
方法链(调用链)
如果你使用方法链,确保每行只调用一个方法。
同时你要合理使用缩进来表示他们的父对象是一致的。
Right:
User
.findOne({ name: 'foo' })
.populate('bar')
.exec(function(err, user) {
return true;
});
Wrong:
User
.findOne({ name: 'foo' })
.populate('bar')
.exec(function(err, user) {
return true;
});
User.findOne({ name: 'foo' })
.populate('bar')
.exec(function(err, user) {
return true;
});
User.findOne({ name: 'foo' }).populate('bar')
.exec(function(err, user) {
return true;
});
User.findOne({ name: 'foo' }).populate('bar')
.exec(function(err, user) {
return true;
});
每行声明一个变量
每个var只声明一个变量,它可以更容易地重新排序。但是,并且变量应该在更有意义的地方声明。
Right:
var keys = ['foo', 'bar'];
var values = [23, 42];
var object = {};
while (keys.length) {
var key = keys.pop();
object[key] = values.pop();
}
Wrong:
var keys = ['foo', 'bar'],
values = [23, 42],
object = {},
key;
while (keys.length) {
key = keys.pop();
object[key] = values.pop();
}
使用首字母小写给变量属性和函数命名
变量,属性和函数名应该使用lowerCamelCase(首字母小写)。他们也应该是描述性的。一般应避免单字符变量和不常见的缩写。
Right:
var adminUser = db.query('SELECT * FROM users ...');
Wrong:
var admin_user = db.query('SELECT * FROM users ...');
类名首字母大写
类名的首字母应该是大写的
Right:
function BankAccount() {
}
Wrong:
function bank_Account() {
}
常量大写
常量应该被声明为普通变量或静态类的属性,全部使用大写字母。
Node.js/V8实际上支持Mozilla的const的扩展,但遗憾的是不能用于类成员,也不是任何ECMA标准的一部分。
Right:
var SECOND = 1 * 1000;
function File() {
}
File.FULL_PERMISSIONS = 0777;
Wrong:
const SECOND = 1 * 1000;
function File() {
}
File.fullPermissions = 0777;
文件命名采用下划线命名法
Right:
child_process.js
string_decoder.js
_linklist.js
类名采用Camel命名法
毕竟它叫 JavaScript 而不是 java_script
Right:
var definitionvar adminUser = db.query('SELECT * FROM users ...');
//小驼峰
function run() {
}
//大驼峰
function BankAccount() {
}
对象、数组的创建
'{}' ,'[]' 代替 new Array,new Object
Right:
var a = ['hello', 'world'];
var b = {
good: 'code',
'is generally': 'pretty'
};
Wrong:
var a = [
'hello', 'world'
];
var b = {"good": 'code'
, is generally: 'pretty'};
错误优先
Node 的异步回调函数的第一个参数应该是错误指示
Right:
function cb(err, data , ...) {...}
使用 === 比较符
Right:
var a = 0;
if (a === '') {
console.log('winning');
}
使用有意义的判断条件
Right:
var isValidPassword = password.length >= 4 && /^(?=.*\d).{4,}$/.test(password);
if (isValidPassword) {
console.log('winning');
}
Wrong:
if (password.length >= 4 && /^(?=.*\d).{4,}$/.test(password)) {
console.log('losing');
}
网友评论