// 不好
const variables;
const globalObj = null; // 不是常量
let globalObj = null;
for (var i = 0; i < 5; i++) {
console.log(i);
}
console.log(i); // 4
// 好
let variables;
var globalObj = null;
for (let i = 0; i < 5; i++) {
console.log(i);
}
console.log(i); // ReferenceError: i is not defined
// 不好
function someFun(opt) {
let opt1 = opt.opt1;
let opt2 = opt.opt2;
console.log(op1);
}
// 好
function someFun(opt) {
let { opt1, opt2 } = opt;
console.log(`$(opt1) 加上 $(opt2)`);
}
function someFun({ opt1, opt2 }) {
console.log(opt1);
}
3.3.2 若函数有多个返回值时,使用对象解构,不使用数组解构,避免添加顺序的问题
// 不好
function anotherFun() {
const one = 1, two = 2, three = 3;
return [one, two, three];
}
const [one, three, two] = anotherFun(); // 顺序乱了
// one = 1, two = 3, three = 2
// 好
function anotherFun() {
const one = 1, two = 2, three = 3;
return { one, two, three };
}
const { one, three, two } = anotherFun(); // 不用管顺序
// one = 1, two = 2, three = 3
3.3.3 已声明的变量不能用于解构赋值(语法错误)
// 语法错误
let a;
{ a } = { b: 123};
3.4 数组解构
数组元素与顺序相关
3.4.1 交换变量的值
let x = 1;
let y = 2;
// 不好
let temp;
temp = x;
x = y;
y = temp;
// 好
[x, y] = [y, x]; // 交换变量
本规范是基于JavaScript规范拟定的,只针对ES6相关内容进行约定
如变量命名,是否加分号等约定的请参考JavaScript规范
应注意目前的代码转换工具(如Babel,Traceur)不够完善,有些特性须谨慎使用
规范内容
声明
对于只在当前作用域下有效的变量,应使用
let
来代替var
对于全局变量声明,采用
var
,但应避免声明过多全局变量污染环境对于常量应使用
const
进行声明,命名采用驼峰写法对于使用 immutable 数据应用
const
进行声明注意:
const
与let
只在声明所在的块级作用域内有效字符串
以反引号( ` )标示
可读性更强,代码更易编写
注意排版引起空格的问题,使用场景为声明HTML模板字符串
解构
对象解构 元素与顺序无关
对象指定默认值时仅对恒等于undefined ( !== null ) 的情况生效
数组元素与顺序相关
数组
Set
,Map
)转为真正数组采用
Array.from
进行转换结合
Set
结构与Array.from
使用indexOf,HashTable等形式,不够简洁清晰
采用数组扩展
...
形式采用
Array.of
进行转换函数
箭头函数更加简洁,并且绑定了this
函数体只有单行语句时,允许写在同一行并去除花括号
当函数只有一个参数时,允许去除参数外层的括号
使用箭头函数
arguments
, 采用rest语法...
代替rest参数是真正的数组,不需要再转换
注意:箭头函数中不能使用
arguments
对象采用函数默认参数赋值语法
更加简洁
函数方法不要使用箭头函数,避免this指向的混乱
类
PascalCased
)类中的方法定义时, 方法名与左括号
(
之间【不保留】空格间距类中的方法定义时,右括号
)
须与花括号{
【保留】一个空格间距6.2 定义类时,方法的顺序如下:
constructor
public
get/set
公用访问器,set
只能传一个参数public methods 公用方法,公用相关命名使用小驼峰式写法(
lowerCamelCase
)private
get/set
私有访问器,私有相关命名应加上下划线_
为前缀private methods 私有方法
new
prototype
进行模拟扩展Class更加简洁,易维护
class不存在hoist问题,应先定义class再实例化
使用继承时,应先定义父类再定义子类
this
的注意事项子类使用
super
关键字时,this
应在调用super
之后才能使用可在方法中
return this
来实现链式调用写法模块
import / export
来做模块加载导出,不使用非标准模块写法跟着标准走的人,运气总不会太差
import / export
后面采用花括号{ }
引入模块的写法时,须在花括号内左右各保留一个空格方便调用方使用
import
不使用统配符*
进行整体导入确保模块与模块之间的关系比较清晰
import
与export
混合在一行分开导入与导出,让结构更清晰,可读性更强
export
置于底部,使欲导出变量更加清晰