本规范是基于JavaScript规范拟定的,只针对ES6相关内容进行约定
如变量命名,是否加分号等约定的请参考JavaScript规范
应注意目前的代码转换工具(如Babel,Traceur)不够完善,有些特性须谨慎使用
ES6 Coding Style English Version
规范内容
声明
- 1.1 变量
对于只在当前作用域下有效的变量,应使用
let
来代替var
对于全局变量声明,采用
var
,但应避免声明过多全局变量污染环境
1 | // 不好 |
- 1.2 常量
对于常量应使用
const
进行声明,命名采用驼峰写法
对于使用 immutable 数据应用
const
进行声明
注意:
const
与let
只在声明所在的块级作用域内有效
1 | // 不好 |
字符串
- 2.1 处理多行字符串,使用模板字符串
以反引号( ` )标示
可读性更强,代码更易编写
注意排版引起空格的问题,使用场景为声明HTML模板字符串
1 | // 不好 |
- 2.2 处理字符串拼接变量时,使用模板字符串
1 | // 不好 |
解构
- 3.1 嵌套结构的对象层数不能超过3层
1 | // 不好 |
- 3.2 解构语句中统一不使用圆括号
1 | // 不好 |
- 3.3 对象解构
对象解构 元素与顺序无关
对象指定默认值时仅对恒等于undefined ( !== null ) 的情况生效
- 3.3.1 若函数形参为对象时,使用对象解构赋值
1 | // 不好 |
- 3.3.2 若函数有多个返回值时,使用对象解构,不使用数组解构,避免添加顺序的问题
1 | // 不好 |
- 3.3.3 已声明的变量不能用于解构赋值(语法错误)
1 | // 语法错误 |
- 3.4 数组解构
数组元素与顺序相关
- 3.4.1 交换变量的值
1 | let x = 1; |
- 3.4.2 将数组成员赋值给变量时,使用数组解构
1 | const arr = [1, 2, 3, 4, 5]; |
数组
- 4.1 将类数组(array-like)对象与可遍历对象(如
Set
,Map
)转为真正数组
采用
Array.from
进行转换
1 | // 不好 |
- 4.2 数组去重
结合
Set
结构与Array.from
使用indexOf,HashTable等形式,不够简洁清晰
1 | // 好 |
- 4.3 数组拷贝
采用数组扩展
...
形式
1 | const items = [1, 2, 3]; |
- 4.4 将一组数值转为数组
采用
Array.of
进行转换
1 | // 不好 |
函数
- 5.1 当要用函数表达式或匿名函数时,使用箭头函数(Arrow Functions)
箭头函数更加简洁,并且绑定了this
1 | // 不好 |
- 5.1.1 箭头函数书写约定
函数体只有单行语句时,允许写在同一行并去除花括号
当函数只有一个参数时,允许去除参数外层的括号
1 | // 好 |
- 5.1.2 用箭头函数返回一个对象,应用括号包裹
1 | // 不好 |
- 5.2 立即调用函数 IIFE
使用箭头函数
1 | // 不好 |
- 5.3 不使用
arguments
, 采用rest语法...
代替
rest参数是真正的数组,不需要再转换
注意:箭头函数中不能使用
arguments
对象
1 | // 不好 |
- 5.4 函数参数指定默认值
采用函数默认参数赋值语法
1 | // 不好 |
- 5.5 对象中的函数方法使用缩写形式
更加简洁
函数方法不要使用箭头函数,避免this指向的混乱
1 | // 不好 |
类
- 6.1 类名应使用帕斯卡写法(
PascalCased
)
1 | // 好 |
- 6.1.1 类名与花括号须保留一个空格间距
类中的方法定义时, 方法名与左括号
(
之间【不保留】空格间距
类中的方法定义时,右括号
)
须与花括号{
【保留】一个空格间距
1 | // 不好 |
6.2 定义类时,方法的顺序如下:
constructor
public
get/set
公用访问器,set
只能传一个参数public methods 公用方法,公用相关命名使用小驼峰式写法(
lowerCamelCase
)private
get/set
私有访问器,私有相关命名应加上下划线_
为前缀private methods 私有方法
1 | // 好 |
- 6.3 如果不是class类,不使用
new
1 | // 不好 |
- 6.4 使用真正意思上的类Class写法,不使用
prototype
进行模拟扩展
Class更加简洁,易维护
1 | // 不好 |
- 6.5 class应先定义后使用
class不存在hoist问题,应先定义class再实例化
使用继承时,应先定义父类再定义子类
1 | // 不好 |
- 6.6
this
的注意事项
子类使用
super
关键字时,this
应在调用super
之后才能使用
可在方法中
return this
来实现链式调用写法
1 | class Foo { |
模块
- 7.1 使用
import / export
来做模块加载导出,不使用非标准模块写法
跟着标准走的人,运气总不会太差
1 | // 不好 |
- 7.1.1
import / export
后面采用花括号{ }
引入模块的写法时,须在花括号内左右各保留一个空格
1 | // 不好 |
- 7.2 应确保每个module有且只有一个默认导出模块
方便调用方使用
1 | // 不好 |
- 7.3
import
不使用统配符*
进行整体导入
确保模块与模块之间的关系比较清晰
1 | // 不好 |
- 7.4 不要将
import
与export
混合在一行
分开导入与导出,让结构更清晰,可读性更强
1 | // 不好 |
- 7.5 多变量要导出时应采用对象解构形式
export
置于底部,使欲导出变量更加清晰
1 | // 不好 |
Copyright
Copyright (c) 2016 Hancoson