什么是变量的解构(Destructuring)赋值?
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构
只要等号两边的模式相同,左边的变量就会被赋予对应的值
- 数组解构赋值
let [m,n]=[9,4];
console.log(m,n); // m 9; n 4
- 对象解构赋值(对象的结构赋值,与顺序无关因为变量必须与属性同名,才能取到正确的值)
let {p,q}={q:"hello",p:"hi"};
console.log(p,q); //hi hello
注:
1.如果解构不成功,变量的值就等于undefined
let {p} = {q: 'a'};
p // undefined
2.解构也可以用于嵌套结构的对象
let [a, [b], c] = [1, [2], 3]; //a=1 ; b=2; c=3;
3.如果要将一个已经声明的变量用于解构赋值,要在 {} 外加上 () 否则JavaScript引擎会将 {p} 理解成一个代码块
let p;
({p} = {p: 8});
但是在有些情况下是不能使用圆括号的:
1.变量声明语句中,不能带有圆括号
2.函数参数中,模式不能带有圆括号
3.赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中
所以可以使用 () 的情况只有一种 —— 赋值语句的非模式部分,可以使用圆括号
用途
<1> 交换两个变量的值
let a=1,b=2;
[a,b]=[b,a]; //a=2 b=1
<2>从函数返回多个值
一般要返回多个值的话,我们只能用数组存值,然后输出,有了解构赋值就可以提取出多个值
function fun() {
return [1, 2, 3];
}
let [a, b, c] = fun();
console.log(a,b,c); // 输出1 2 3
网友评论