变量的解构赋值---圆括号问题

不能使用圆括号的情况:

以下三种赋值解构不能使用圆括号:

(1)变量声明语句:

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

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

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

以上6个语句会全部报错,因为他们都是变量声明语句,模式不能使用圆括号

(2)函数参数:

函数参数也属于变量声明,因此不能带有圆括号

// 报错
function f([(z)]) { return z; }
// 报错
function f([z,(x)]) { return x; }

(3)赋值语句的模式

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

[(b)] = [3]; // 正确
({ p: (d) } = {}); // 正确
[(parseInt.prop)] = [3]; // 正确
上面三行语句都可以正确执行,因为首先它们都是赋值语句,而不是声明语句;其次它们的圆括号都不属于模式的一部分。第一行语句中,模式是取数组的第一个成员,跟圆括号无关;第二行语句中,模式是 p ,而不是 d ;第三行语句与第一行语句的性质一致。




你可能感兴趣的:(ECMAScript,6)