es6 对象解构赋值

基本使用语法

注意:对象解构赋值的键名对应很重要,不然会找不到。因为对象是无序的,必须通过键名来识别。

未先声明变量再进行对象解构赋值

//对象的键名和键值一致时,可以只写一个变量名即可
let {aa,bb} = {aa:123,bb:456};
//等价于 let {aa:aa,bb:bb} = {aa:123,bb:456};
console.log(aa,bb); // 123  456

 

先声明变量再进行对象解构赋值

let aa,bb;
//对象的键名和键值一致时,可以只写一个变量名即可
({aa,bb} = {aa:123,bb:456});
console.log(aa,bb); // 123  456

注意:如果变量已经事先被声明了,那么在进行对象解构赋值的时候一定要用小括号包住,不然会报错。

 

对象的键名和键值不一致时

//对象的键名和键值一致时,可以只写一个变量名即可
let {aa:a,bb:b} = {aa:123,bb:456};
console.log(a,b); // 123  456
console.log(aa); // 报错aa is not defined

上面的代码中,对象的解构赋值是内部机制,是先找到同名属性,然后再赋给对应的变量。
aa是匹配的模式, a才是变量。真正被赋值的是后者,而不是前者。

 

有默认值的对象解构赋值

let {a = 3,b = 4} = {a:5}
console.log(a,b); // 5  4

对象解构赋值的使用场景

处理后端返回的json数据,取出自己想要的字段值

let dataJson = {
title:"abc",
name:"winne",
test:[{
   title:"ggg",
   desc:"对象解构赋值"
}]
}
//我们只需要取出需要的两个title值(注意结构和键名)
let {title:oneTitle,test:[{title:twoTitle}]} = dataJson;
//如果只需要其中一个数据,直接根据结构键名来写就好了
let { name } = dataJson;  //相当于es5的 let name = dataJson.name;
console.log(oneTitle,twoTitle); // abc  ggg
console.log(name); // winne

注意:json结构和键名要一一对应才能进行正确解构赋值。

posted @ 2021-12-16 09:34  青幽草  阅读(499)  评论(0编辑  收藏  举报