ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。
以前这样定义变量
let a = 1; let b = 2; let c = 3; console.log(a, b, c);
ES6这样定义:
let [a, b, c] = [1 ,2, 3]; console.log(a,b,c)
二者结果相等。
只要等号两边的模式结构相等,值就能一一对应上,如果模式结构不相等,则按照顺序匹配对应,Such as:
let [x, y] = [1, 2, 3]; let [a, [b], c] = [5, [6, 7], 8]; console.log("x:" + x, "y:" + y, "a:" + a, "b:" + b, "c:" + c);
结果
x:1 y:2 a:5 b:6 c:8
按照顺序对应即可,对应不上的值会报undefined。
解构赋值还可以是对象,只要数据结构具有iterator接口,都可采用数组进行解构赋值。
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {
};
前5个例子转为对象之后并没有实现iterator接口,而最后一个例子本身便不具备Iterator接口。
function* fibs() {
let a = 0;
let b = 1;
while (true