## 基本
* 缩进使用soft tab(4个空格)
* 单行长度不要超过80
* 语句结束需要添加分号
* 标准变量采用驼峰命名法
* 常量全大写用下划线连接
* 函数作用域下的所有变量尽量提到函数首部。
* 下列关键字后必须有大括号(即使代码块的内容只有一行):if, else,for, while, do, switch, try, catch, finally, with
### 1. 空格
#### 以下几种情况不需要空格:
* 对象的属性名后
* 前缀一元运算符后
* 后缀一元运算符前
* 函数调用括号前
* 无论是函数声明还是函数表达式,'('前不要空格
* 数组的'['后和']'前
* 对象的'{'后和'}'前
* 运算符'('后和')'前
#### 以下几种情况需要空格:
* 二元运算符前后
* 三元运算符'?:'前后
* 代码块'{'前
* 下列关键字前:else, while, catch, finally
* 下列关键字后:if, else, for, while, do, switch, case, try,catch, finally, with, return, typeof
* 单行注释'//'后(若单行注释和代码同行,则'//'前也需要),多行注释'*'后
* 对象的属性值前
* for循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格
* 无论是函数声明还是函数表达式,'{'前一定要有空格
* 函数的参数之间
例如:
~~~
// not good
var a = {
b :1
};
// good
var a = {
b: 1
};
// not good
++ x;
y ++;
z = x?1:2;
// good
++x;
y++;
z = x ? 1 : 2;
// not good
var a = [ 1, 2 ];
// good
var a = [1, 2];
// not good
var a = ( 1+2 )*3;
// good
var a = (1 + 2) * 3;
// no space before '(', one space before '{', one space between function parameters
var doSomething = function(a, b, c) {
// do something
};
// no space before '('
doSomething(item);
// not good
for(i=0;i<6;i++){
x++;
}
// good
for (i = 0; i < 6; i++) {
x++;
}
~~~
### 2. 空行
#### 以下几种情况需要空行:
* 变量声明后(当变量声明在代码块的最后一行时,则无需空行)
* 注释前(当注释在代码块的第一行时,则无需空行)
* 代码块后(在函数调用、数组、对象中则无需空行)
* 文件最后保留一个空行
~~~
// need blank line after variable declaration
var x = 1;
// not need blank line when variable declaration is last expression in the current block
if (x >= 1) {
var y = x + 1;
}
var a = 2;
// need blank line before line comment
a++;
function b() {
// not need blank line when comment is first line of block
return a;
}
// need blank line after blocks
for (var i = 0; i < 2; i++) {
if (true) {
return false;
}
continue;
}
var obj = {
foo: function() {
return 1;
},
bar: function() {
return 2;
}
};
// not need blank line when in argument list, array, object
func(
2,
function() {
a++;
},
3
);
var foo = [
2,
function() {
a++;
},
3
];
var foo = {
a: 2,
b: function() {
a++;
},
c: 3
};
~~~
### 3. 换行
#### 换行的地方,行末必须有','或者运算符;
#### 以下几种情况不需要换行:
* 下列关键字后:else, catch, finally
* 代码块'{'前
以下几种情况需要换行:
* 代码块'{'后和'}'前
* 变量赋值后
~~~
// not good
var a = {
b: 1
, c: 2
};
x = y
? 1 : 2;
// good
var a = {
b: 1,
c: 2
};
x = y ? 1 : 2;
x = y ?
1 : 2;
// no need line break with 'else', 'catch', 'finally'
if (condition) {
...
} else {
...
}
try {
...
} catch (e) {
...
} finally {
...
}
// not good
function test()
{
...
}
// good
function test() {
...
}
// not good
var a, foo = 7, b,
c, bar = 8;
// good
var a,
foo = 7,
b, c, bar = 8;
~~~
### 4. 单行注释
* 双斜线后,必须跟一个空格;
* 缩进与下一行代码保持一致;
~~~
if (condition) {
// if you made it here, then all security checks passed
allowed();
}
~~~
### 5. 多行注释
#### '*'后跟一个空格
### 6. 文档注释
[usejsdoc](http://yuri4ever.github.io/jsdoc/)
### 7. null和undefined
* 不要直接使用undefined进行变量判断,使用typeof和字符串'undefined'对变量进行判断
* 不要用null来判断函数调用时有无传参
~~~
// not good
if (person === undefined) {
...
}
// good
if (typeof person === 'undefined') {
...
}
// not good
function test(a, b) {
if (b === null) {
// not mean b is not supply
...
}
}
var a;
if (a === null) {
...
}
// good
var a = null;
if (a === null) {
...
}
~~~