ES6 快查手册

解构赋值

2019-04-17  本文已影响0人  爱绑架的猫

ES 6 的解构赋值:

1,数组的解构赋值

2,对象的解构赋值

3,字符串的解构赋值

4,数值和布尔值的解构赋值

5,函数参数的解构赋值

数组的解构赋值

let [a,b,c] = [1,2,3];
// a = 1,b = 2,c = 3
let [x,y, ...z] = [1,2,3,4,5];
// x 1,y 2,z [3,4,5]
let [x,y] = [1];
// x 1,y undefined,如果没有对应的值 则为 undefined 
let [foo] = NaN;
// 报错 ,如果右侧不是数组(不可遍历的对象,NaN,false,undefined...),就会报错
let [x,y,z] = new Set(['a','b','c']);
// Set 结构,也可以使用数组的解构赋值 x = 'a'

事实上只要具有 Iterator 接口,都可以采用数组形式的解构赋值

function* fun() {
    yield 'a';
    yield 'b';
}
let [first,second] = fun();
// first = a ,second = b

上面是一个 Generator 函数,原生具有 Iterator 接口,解构赋值会依次从这个接口获取值。

默认值

解构赋值允许设置 默认值

let [val = true] = [];
// val = true

注意: Es6 内部使用严格相等运算符 (===),判断一个位置是否有值,所以,只有当一个数组成员严格等于 undefined ,默认值才会有效。

let [x = 1] = [undefined];
// x = 1 ,默认值生效
let [x = 1] = [null];
// x = null,因为 null 不全等于 undefined,所以默认值不生效

默认值可以引用解构赋值的其他变量,但是引用之前必须声明

let [x = 1,y = x] = []; // x 1 ,y 1
let [y = x,x = 1] = []; // 报错,因为 x 还未声明,y 就引用了 x

对象的解构赋值

对象解构赋值的特点:

1,匹配没有顺序,变量名必须和属性名同名

2,匹配的 模式 不被赋值

3,可以多次,嵌套赋值

4,可以获取继承属性的值

let {val,val2} = {val:'hello world!'};
// val = hello world !, val2 = undefined

let {val:str} = {val:'hello world!'};
// val = undefined ,val 是匹配的模式,真正要赋值的 str , 所以 str = hello world!

let {val,val:{name},val:{name:str}} = {val:{name: 'Jack'}}
// val = val:{name:'Jack'}, name = 'Jack', str = 'Jack'

默认值

let {x = 3} = {};
// x = 3
let {x: y = 3} = {}
// y = 3

对象解构赋值的注意:

// 如果一个变量已经声明之后,再用这个变量去结构赋值的时候,需要注意写法
let x;
{x} = {x:3} // 报错,这里会把大括号解析为 代码块
// 正确写法,加上括号
({x} = {x:3}) 

// 数组的对象解构
let arr = [1,2,3];
let {0:first,2:last} = arr;
// first = 1, last = 3

字符串的解构赋值

字符串可以解构赋值,因为字符串被转换成了一个类似数组的对象。

const [a,b,c,d,e] = 'hello';
// a = h,b = e,c = l,d = l,e = o

类似数组的对象都有一个 length 属性,可以对这个属性解构赋值

let {length: len} = 'hello';
// len = 5
上一篇下一篇

猜你喜欢

热点阅读