仅于个人看法,如有偏差,欢迎指正~
解构赋值
解构 ----- 分解数据结构
赋值 ----- 为变量赋值
在ES6中,允许我们按照一一对应的方式,从数组或对象中提取值,再将提取出来的值赋值给变量 解构赋值可以让我们更加方便的从数组或对象中提取值
数组解构
为啥要用解构赋值呢?
在ES6之前的语法中,假如我定义了一个数组arr,如下:
var arr = [1,2,3,4];
//那么我如果想拿arr的值,只能这样
var a = arr[0];
var b = arr[1];
//这样的话,就要多次声明变量来存值,浪费内存空间
//所以就可以用解构赋值来做了
复制代码
数组解构的语法
- 解构操作必须写在等号的左边,用 [ ] 括起来
- 等号左边的数组中,里边的值是变量,所以不能加引号
- 如果等号左右两边的数组中的数据数量是一致的,那么就一一对应的取值就好了
- 如果等号左边的数据比右边的多,那么多出的数据,返回值就是undefined(相当于只声明了没赋值)
let arr = [1, 2, 3];
let [a, b, c, d] = arr;
console.log(a); //1
console.log(b); //2
console.log(c); //3
console.log(d); //undefined
复制代码
对象解构
为什么要用对象解构
在ES6之前,取对象中的某一条属性,用的是 对象名.属性名的方法
let obj = {name:"aaa",age:20};
console.log(obj.name);
//在ES6之前,取对象中的值需要用这种形式。需要多个变量来存储对象中的值,也是会浪费内存
//所以我们就使用对象解构
复制代码
对象解构的语法
- 解构操作必须写在等号的左边,用 { } 括起来 ,{ } 中写的是变量的名字
- 在等号的右边写的是要被解构的对象
- 注意:对象解构实际上是属性匹配 ---- 即 拿变量的名字去匹配对象中属性的名字
- 如果匹配成功,就将对象中属性的值赋给变量
let obj = {name: '李四',age: 22}
let {name,age} = obj;
console.log(name); //李四
console.log(age); //22
复制代码
对象解构的别名
- 左侧的 { } 中的语法可以写成和对象语法一样的。即
age:18 - 思路是:用左侧花括号中的属性来匹配右侧对象中的属性
- 如果匹配成功,把右侧对应属性的属性值 赋值给 左侧冒号后边的那个真正的变量名
let {name:myName,age:myAge} = {name: 'zhangsna',age: 12} //name只用于属性匹配,myName才是来存值的
console.log(myName); //zhangsna
console.log(myAge); //12