变量的解构赋值

.数组的解构赋值

    。解构不成功,相应变量的值为undefined

    。等号右边不是数组,则会报错,

let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};

    。es6内部使用严格相等运算符(===),当数组元素严格相等于undefined的时候,数组元素的默认值才会调用

        let [x = 1] = [null] // x = null;let [x = 1] = [undefined] // x = 1


.对象的解构赋值

    。默认值生效的条件是对象的属性值严格等于undefined,let {x = 1} = {x: undefined} // x = 1,let {x = 1} = {x: null} // x         = null

     。解构的模式是嵌套的对象,而且子对象所在的父属性不存在,则报错,let {a = {b = 1}} = {c = 'ddd'}} // referenceError

     。声明的变量用于解构赋值会报错,let x; {x} = {x: 1} // 报错,因为大括号会将{x}理解为一个代码块从而报错,正确用法:

        let x; ({x} = {x: 1});

     。左边模式中可以不放置任何变量名,({} = [true, false]);

.字符串的解构赋值

    。const [a, b] = 'he'; // a = h,b = e;let {length: len} = 'hello'; // len = 5

.数值、布尔值解构赋值

    。只要等号右边不是数组或对象,都会先转为对象,而undefined和null是无法转为对象的,所以对它们解构会报错

.圆括号问题

    。变量声名语句不得使用圆括号,

// 全部报错
let [(a)] = [1];

let {x: (c)} = {};
let ({x: c}) = {};
let {(x: c)} = {};
let {(x): c} = {};

let { o: ({ p: p }) } = { o: { p: 2 } };

。函数参数,同上,报错

。只有模式有圆括号

({ p: a }) = { p: 42 };
([a]) = [5];

可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。

[(b)] = [3]; // 正确
({ p: (d) } = {}); // 正确
[(parseInt.prop)] = [3]; // 正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值