Node.js 编程规范

参考 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');
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容