?????? 最近看nodej开发指南一书中Node.js编程规范,故摘录于此,学习前人的经验。供学习交流。
?
1.缩进:选择两空格缩进
例如:
function func(boolVar) {
if (boolVar) {
console.log('True');
} else {
console.log('False');
}
};
2.行宽
建议把行宽限制为80个字符
3.语句分隔符
建议一律使用分号,哪怕一行只有一个语句,也
不要省略分号。
4.变量定义
永远使用 var 定义变量,而不要通过赋值隐式定义变量。因为通过赋值隐式定义的变
量总是全局变量,会造成命名空间污染。我们建议绝不使用全局变量,因此要通过 var 把
所有变量定义为局部变量。
使用 var 定义变量时,确保每个语句定义一个变量,而不要通过逗号( , )把多个变
量隔开。
正确的变量定义格式:
var foo;
var bar;
var arr = [40, 'foo'];
var obj = {};
5.变量名和属性名
我们使用小驼峰式命名法(lower camel case)作为所有变量和属性的命名规则,不建议
使用任何单字母的变量名。
正确的命名:
var yourName = 'BYVoid';
6.函数
JavaScript具有函数式编程的特性,因此函数本质上和一般的变量没有区别,对于一般的
函数我们同样使用小驼峰式命名法。但对于对象的构造函数名称(或者不严格地说“类”的
名称),我们使用大驼峰式命名法(upper camel case),也称为Pascal命名法。
规定函数名与参数表之间规定无空格,参数表和括号( { 和 } )之间要有一个空格,
并且在同一行。
正确:
var someFunction = function() {
return 'something';
};
function anotherFunction() {
return 'anything';
}
function DataStructure() {
this.someProperty = 'initialized';
}
7.引号
JavaScript中单引号( ' )和双引号( " )没有任何语义区别,两者都是可用的。我们建
议一律统一为单引号,因为JSON、XML都规定了必须是双引号,这样便于无转义地直接引用。
正确的引号用法:
console.log('Hello world.');
8.关联数组的初始化?
?将 var = { 放在一行,下面每行一对键值,保持两空格的缩进,以分号结尾,}; 最
后单独另起一行。对于每对键值,除非键名之中有空格或者有非法字符,否则一律不用引号。
正确:
var anObject = {
name: 'BYVoid',
website: 'http://www.byvoid.com/',
'is good': true,
};
9.等号
?尽量使用 === 而不是 == 来判断相等,因为 == 包含了隐式类型转换,很多时候可能
?与你的预期不同,例如下面错误的例子,num == literal的值是true。
正确的等号用法:
var num = 9;
var literal = '9';
if (num === literal) {
console.log('Should not be here!!!');
}
10.命名函数
尽量给构造函数和回调函数命名,这样当你在调试的时候可以看见更清晰的调用栈。
对于回调函数,Node.js的API和各个第三方的模块通常约定回调函数的第一个参数是错
误对象err,如果没有错误发生,其值为 undefined。
正确:
req.on('end', function onEnd(err, message) {
if (err) {
console.log('Error.');
}
});
function FooObj() {
this.foo = 'bar';
}
B.11 对象定义
尽量将所有的成员函数通过原型定义,将属性在构造函数内定义,然后对构造函数使用
new 关键字创建对象。绝对不要把属性作为原型定义,因为当要定义的属性是一个对象的
时候,不同实例中的属性会指向同一地址。除非必须,避免把成员函数定义在构造函数内部,
否则会有运行时的闭包开销。
正确:
function FooObj(bar) {
//在构造函数中初始化属性
this.bar = bar;
this.arr = [1, 2, 3];
}
//使用原型定义成员函数
FooObj.prototype.func = function() {
console.log(this.arr);
};
var obj1 = new FooObj('obj1');
var obj2 = new FooObj('obj2');
obj1.arr.push(4);
obj1.func(); // [1, 2, 3, 4]
obj2.func(); // [1, 2, 3]
B.12 继承
首先,避免使用复杂的继承,如多重继承或深层次的继承树。如果的确需要继承,那么
尽量使用Node.js的util模块中提供的inherits函数。例如我们要让Foo继承EventEmitter,
最好使用以下方式:
var util = require('util');
var events = require('events');
function Foo() {
}
util.inherits(Foo, events.EventEmitter);
?
?
??
?