1 结构
1.1 缩进
[强制]使用4个空格作为一个缩进层级
[强制] switch 下的 case 和 default 必须增加一个缩进层级。
示例:
// good
switch (variable) {
case '1':
// do...
break;
case '2':
// do...
break;
default:
// do...
}
// bad
switch (variable) {
case '1':
// do...
break;
case '2':
// do...
break;
default:
// do...
}
1.2 空格
[强制] 二元运算符两侧必须有一个空格,一元运算符与操作对象之间不允许有空格
var a = !arr.length;
a++;
a = b + c;
[强制] 用作代码块起始的左花括号 { 前必须有一个空格。
// good
if (condition) {
}
while (condition) {
}
function funcName() {
}
// bad
if (condition){
}
while (condition){
}
[强制] if / else / for / while / function / switch / do / try / catch / finally 关键字后,必须有一个空格。
// good
if (condition) {
}
while (condition) {
}
(function () {
})();
[强制] 在对象创建时,属性中的 : 之后必须有空格,: 之前不允许有空格。
// good
var obj = {
a: 1,
b: 2,
c: 3
};
// bad
var obj = {
a : 1,
b:2,
c :3
};
[强制] 函数声明、具名函数表达式、函数调用中,函数名和 ( 之间不允许有空格。
// good
function funcName() {
}
var funcName = function funcName() {
};
funcName();
// bad
function funcName () {
}
var funcName = function funcName () {
};
[强制] , 和 ; 前不允许有空格。
// good
callFunc(a, b);
// bad
callFunc(a , b) ;
[强制] 单行声明的数组与对象,如果包含元素,{} 和 [] 内紧贴括号部分不允许包含空格。
// good
var arr1 = [];
var arr2 = [1, 2, 3];
var obj1 = {};
var obj2 = {name: 'obj'};
var obj3 = {
name: 'obj',
age: 20,
sex: 1
};
// bad
var arr1 = [ ];
var arr2 = [ 1, 2, 3 ];
var obj1 = { };
var obj2 = { name: 'obj' };
var obj3 = {name: 'obj', age: 20, sex: 1};
1.3 换行
[强制] 每行不得超过 120 个字符。
[强制] 运算符处换行时,运算符必须在新行的行首。
// good
if (user.isAuthenticated()
&& user.isInRole('admin')
&& user.hasAuthority('add-admin')
|| user.hasAuthority('delete-admin')
) {
// Code
}
var result = number1 + number2 + number3
+ number4 + number5;
// bad
if (user.isAuthenticated() &&
user.isInRole('admin') &&
user.hasAuthority('add-admin') ||
user.hasAuthority('delete-admin')) {
// Code
}
var result = number1 + number2 + number3 +
number4 + number5;
[建议] 对于 if...else...、try...catch...finally 等语句,推荐使用在 } 号后添加一个换行 的风格,使代码层次结构更清晰,阅读性更好。
if (condition) {
// some statements;
}
else {
// some statements;
}
try {
// some statements;
}
catch (ex) {
// some statements;
}
1.4 语句
[强制] 不得省略语句结束的分号。
[强制] 在 if / else / for / do / while 语句中,即使只有一行,也不得省略块 {...}。
// good
if (condition) {
callFunc();
}
// bad
if (condition) callFunc();
if (condition)
callFunc();
2 命名
[强制] 变量 使用 Camel命名法。
var loadingModules = {};
[强制] 常量 使用 全部字母大写,单词间下划线分隔 的命名方式。
var HTML_ENTITY = {};
[强制] 函数以及函数的参数 使用 Camel命名法。
function stringFormat(theBells) {
}
[强制] 类 使用 Pascal命名法。
function TextNode(options) {
}
[强制] 由多个单词组成的缩写词,在命名中,根据当前命名法和出现的位置,所有字母的大小写与首字母的大小写保持一致。
function XMLParser() {
}
function insertHTML(element, html) {
}
var httpRequest = new HTTPRequest();
[强制] 类名 使用 名词。
function Engine(options) {
}
[建议] 函数名 使用 动宾短语。
function getStyle(element) {
}
3 注释
3.1 单行注释:
[强制] 必须独占一行。// 后跟一个空格,缩进与下一行被注释说明的代码一致。
3.2 多行注释:
[建议] 避免使用 /.../ 这样的多行注释。有多行注释内容时,使用多个单行注释。**
3.3 函数/方法注释
[强制] 函数/方法注释必须包含函数说明,有参数和返回值时必须使用注释标识。
[强制] 参数和返回值注释必须包含类型信息和说明。
/**
* 函数描述
*
* @param {string} p1 参数1的说明
* @param {string} p2 参数2的说明,比较长
* 那就换行了.
* @param {number=} p3 参数3的说明(可选)
* @return {Object} 返回值描述
*/
function foo(p1, p2, p3) {
var p3 = p3 || 10;
return {
p1: p1,
p2: p2,
p3: p3
};
}gg
4 语言特性
4.1 条件
[强制] 在 Equality Expression 中使用类型严格的 ===。仅当判断 null 或 undefined 时,允许使用 == null。
解释:
使用 === 可以避免等于判断中隐式的类型转换。
示例:
// good
if (age === 30) {
// ......
}
// bad
if (age == 30) {
// ......
}
4.2 类型抓换
[建议] 转换成 string 时,使用 + ''。
// good
num + '';
// bad
new String(num);
num.toString();
String(num);
[建议] 转换成 number 时,通常使用 +。
// good
+str;
// bad
Number(str);
[强制] 使用 parseInt 时,必须指定进制。
// good
parseInt(str, 10);
// bad
parseInt(str);
[建议] 转换成 boolean 时,使用 !!。
var num = 3.14;
!!num;
4.3 字符串
[强制] 字符串开头和结束使用单引号 '。
4.4 数组
[强制] 使用数组字面量 [] 创建新数组,除非想要创建的是指定长度的数组。
// good
var arr = [];
// bad
var arr = new Array();
网友评论