【ES6】变量解构赋值

解构:ES6允许按照一定模式从数据和对象中提取值来对变量进行赋值

1.数组的解构赋值

let [a, b, c] = [1, 2, 3];
let [x, , y] = [1, 2, 3];
x // 1
y // 3

如果解构不成功,变量的值就等于undefined

let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []

不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组

let [a, [b], d] = [1, [2, 3], 4];
a // 1
b // 2
d // 4

如果等号右边不是可遍历(本身不具备Iterator接口)的解构,那么将会报错

默认值

解构赋值允许指定默认值。

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

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

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

2.对象的解构赋值

let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"

实际上为

let { foo: foo, bar: bar } = { foo: 'aaa', bar: 'bbb' };

foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo

let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
foo // error: foo is not defined

 默认值

默认值生效的条件是,对象的属性值严格等于undefined

var {x = 3} = {x: undefined};
x // 3

var {x = 3} = {x: null};
x // null

注意点

 

猜你喜欢

转载自www.cnblogs.com/Mijiujs/p/12084309.html