分号
每行结尾都补充分号,方便区分边界。
const appName = 'name';复制复制失败复制成功
空格
以下几种情况不需要空格:
- 对象的属性名后
- 前缀一元运算符后
- 后缀一元运算符前
- 函数调用括号前
- 无论是函数声明还是函数表达式,
(
前不要空格 - 数组的
[
后和]
前 - 对象的
{
后和}
前 - 运算符
(
后和)
前
以下几种情况需要空格:
- 二元运算符前后
- 三元运算符
?:
前后 - 代码块
{
前 - 下列关键字前:
else
,while
,catch
,finally
- 下列关键字后:
if
,else
,for
,while
,do
,switch
,case
,try
,catch
,finally
,with
,return
,typeof
- 单行注释
//
后(若单行注释和代码同行,则//
前也需要),多行注释*
后 - 对象的属性值前
for
循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格- 无论是函数声明还是函数表达式,
{
前一定要有空格 函数的参数之间
// not good
const a = {
b :1
};
// good
const a = {
b: 1
};
// not good
++ x;
y ++;
z = x?1:2;
// good
++x;
y++;
z = x ? 1 : 2;
// not good
const a = [ 1, 2 ];
// good
const a = [1, 2];
// not good
const a = ( 1+2 )*3;
// good
const a = (1 + 2) * 3;
// no space before '(', one space before '{', one space between function parameters
const 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++;
}复制复制失败复制成功
引号
最外层统一使用单引号。
const name = 'name';复制复制失败复制成功
变量命名
标准变量和普通函数采用驼峰式命名
- 私有属性、变量和方法以下划线 _ 开头。
- 常量全大写,用下划线连接
- 构造函数和类采用 Pascal 命名法
- 枚举变量 使用 Pascal 命名法,属性全大写,用下划线连接
- ‘ID’ 在变量名中全大写
- ‘URL’ 在变量名中全大写
- ‘Android’ 在变量名中大写第一个字母
- ‘iOS’ 在变量名中小写第一个,大写后两个字母
jquery 对象必须以’$’开头命名
const thisIsMyName;
const _privateProp = {};
const goodID;
const reportURL;
const AndroidVersion;
const iOSVersion;
const MAX_COUNT = 10;
function Person(name) {
this.name = name;
}
class Person {}
const EnumList = {
READING: 1,
READED: 2,
APPLIED: 3,
READY: 4
};
const $body = $('body');复制复制失败复制成功
命名语法
类名,使用名词。
- 函数名,使用动宾短语。
- boolean 类型的变量使用 is 或 has 开头。
Promise 对象用动宾短语的进行时表达。
class Engine {}
function getStyle() {}
const isReady = false;
const hasMoreCommands = false;
const loadingData = new Promise((resolve, reject) => {});复制复制失败复制成功
变量声明
使用 ES6 的
let
和const
声明,优先使用const
声明const name = 'mikky'复制复制失败复制成功
函数
无论是函数声明还是函数表达式,’(‘前不要空格,但’{‘前一定要有空格;
- 函数调用括号前不需要空格;
- 立即执行函数外必须包一层括号;
- 不要给inline function命名;
参数之间用’, ‘分隔,注意逗号后有一个空格。
// no space before '(', but one space before'{'
const doSomething = function(item) {
// do something
};
function doSomething(item) {
// do something
}
// not good
doSomething (item);
// good
doSomething(item);
// requires parentheses around immediately invoked function expressions
(function() {
return 1;
})();
// not good
[1, 2].forEach(function x() {
// ...
});
// good
[1, 2].forEach(function() {
// ...
});
// not good
const a = [1, 2, function a() {
// ...
}];
// good
const a = [1, 2, function() {
// ...
}];
// use ', ' between function parameters
const doSomething = function(a, b, c) {
// do something
};复制复制失败复制成功
数组、对象
对象属性名不需要加引号;
- 对象以缩进的形式书写,不要写在一行;
数组、对象最后不要有逗号。
// not good
const a = {
'b': 1
};
const a = {b: 1};
const a = {
b: 1,
c: 2,
};
// good
const a = {
b: 1,
c: 2
};复制复制失败复制成功
括号
下列关键字后必须有大括号(即使代码块的内容只有一行):
if
,else
,for
,while
,do
,switch
,try
,catch
,finally
,with。
// not good
if (condition)
doSomething();
// good
if (condition) {
doSomething();
}复制复制失败复制成功
注释
As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性、可读性。
As long as necessary(如有必要,尽量详尽):合理的注释、空行排版等,可以让代码更易阅读、更具美感单行注释
[强制] 必须独占一行。// 后跟一个空格,缩进与下一行被注释说明的代码一致。
多行注释
[建议] 避免使用 /…/ 这样的多行注释。有多行注释内容时,使用多个单行注释。
文档化注释
[强制] 为了便于代码阅读和自文档化,以下内容必须包含以
/**...*/
形式的块注释中。
解释:文件
- namespace
- 类
- 函数或方法
- 类属性
- 事件
- 全局变量
- 常量
- AMD 模块
[强制] 文档注释前必须空一行。
[建议] 自文档化的文档说明 what,而不是 how。
该部分推荐参考 百度 JavaScript 编码规范,此处仅对文件部分的注释规范做约定。
文件注释
文件注释可使用 file-header
插件来生成,基本格式为:
/*
* @Author: author name
* @Date: 2019-08-14 14:03:30
* @Last Modified by: caiyin
* @Last Modified time: 2019-08-14 14:07:41
* @Description:
* file discription(en/zh)
*/复制复制失败复制成功
类型定义
[强制] 类型定义都是以 { 开始, 以 } 结束。
解释:
常用类型如:{string}, {number}, {boolean}, {Object}, {Function}, {RegExp}, {Array}, {Date}。
类型不仅局限于内置的类型,也可以是自定义的类型。比如定义了一个类 Developer,就可以使用它来定义一个参数和返回值的类型。
[强制] 对于基本类型 {string}, {number}, {boolean},首字母必须小写。
类型定义 | 语法示例 | 解释 |
---|---|---|
String | {string} | — |
Number | {number} | — |
Boolean | {boolean} | — |
Object | {Object} | — |
Function | {Function} | — |
RegExp | {RegExp} | — |
Array | {Array} | — |
Date | {Date} | — |
单一类型集合 | {Array. |
string 类型的数组 |
多类型 | {(number|boolean)} | 可能是 number 类型, 也可能是 boolean 类型 |
允许为null | {?number} | 可能是 number, 也可能是 null |
不允许为null | {!Object} | Object 类型, 但不是 null |
Function类型 | {function(number, boolean)} | 函数, 形参类型 |
Function带返回值 | {function(number, boolean):string} | 函数, 形参, 返回值类型 |
Promise | Promise. |
Promise,成功返回的数据类型,失败返回的错误类型 |
参数可选 | @param {string=} name | 可选参数, =为类型后缀 |
可变参数 | @param {…number} args | 变长参数, …为类型前缀 |
任意类型 | {*} | 任意类型 |
可选任意类型 | @param {*=} name | 可选参数,类型不限 |
可变任意类型 | @param {…*} args | 变长参数,类型不限 |