ES6 中增加了几种对变量初始化的方式,从改进来看,个人觉得可以大大的增加编码的效率。带相对语法可能就晦涩一些了。但总归熟能生巧,多用就不会那么容易犯错了。

变量的解构赋值

ES5 中给多个变量赋值写法如下:

1
2
3
let a = 1;
let b = 2;
let c = 3;

而 ES6 中则一句话搞定:

1
let [a, b, c] = [1, 2, 3];

摘抄书中的一句话“ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。”,更多对于变量的解构赋值请参考书中的详细介绍,我个人觉得平时可能用不到那么变态的用法。

解构赋值默认值

1
2
3
4
5
let [foo = true] = [];
foo // true

let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'

通过上面的代码可以看出,如果赋值时不指定具体内容,那么会使用我们准备好的默认值,这与其他一些语言中的函数默认参数差不多。更多细节请参考书中介绍。

对象的解构赋值

1
2
3
4
5
6
let { bar, foo } = { foo: "aaa", bar: "bbb" };
foo // "aaa"
bar // "bbb"

let { baz } = { foo: "aaa", bar: "bbb" };
baz // undefined

对象的解构赋值相对严格一些,它不是按顺序解析的,而是按成员名称匹配解析的。其他字符串、布尔、函数参数都具有解构赋值的特性。且均无明显差异。书中介绍了一些解构赋值的常用应用场景,比如下面这个案例,通过解构赋值就很方便的遍历了 map 中的内容。

1
2
3
4
5
6
7
var map = new Map();
map.set('first', 'Hello');
map.set('second', 'World');

for (let [key, value] of map) {
console.log(key + ' is ' + value);
}