ES6 解构赋值圆括号的使用
2019-05-10 本文已影响6人
肆意木
ES6 的规则,只要有可能导致解构的歧义,就不得使用圆括号。
可以使用圆括号进行解构赋值的情况:赋值语句的非模式部分
非模式部分:为了区别于表达式,一定的结构模式(自己的理解,不是官方解释,慎用)
[(a)] = [3];
({key:(s)} = {hello:19});
[(parseInt.prop)] = [3]
console.log(a) //3
console.log(s) //undefined
console.log(parseInt) //{ [Function: parseInt] prop: 3 }
console.log(parseInt.prop) //3
首先它们都是赋值语句,而不是声明语句;其次它们的圆括号都不属于模式的一部分。
不可以使用圆括号进行解构赋值的情况:
- 变量声明语句
//都会报错
let [(a)] = [1];
let {x: (c)} = {};
let ({x: c}) = {};
let {(x: c)} = {};
let {(x): c} = {};
let { o: ({ p: p }) } = { o: { p: 2 } };
+函数参数
// 报错
function f([(z)]) { return z; }
// 报错
function f([z,(x)]) { return x; }
+赋值语句的模式
// 全部报错
({ p: a }) = { p: 42 };
([a]) = [5];
// 报错
[({ p: a }), { x: c }] = [{}, {}];