🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 基本 * 缩进使用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) { ... } ~~~