- 左侧要定义的变量名===右侧对象中的属性名
let {a,b}={a:1,b:{c:2}}; console.log(a,b);//a=1,b={c:2} //左侧要定义的变量,直接等于右侧相同属性名的属性值
//实际上左侧是属性名和属性值相同省略了,如果不省略应该是这样的{a:a,b:b}={a:1,b:{c:2}};
//左侧的属性值是变量,是我们要定义的
- 左侧要定义的变量名!==右侧对象中的属性名,左侧就不能省略
let {a:x1,b:x2}={a:1,b:{c:2}};
console.log(x1,x2);//a=1,b={c:2}
- 对象的结构he数组的结构都是同时定义多个变量,区别是一个从数组里拿值,一个从对象里拿值
- 对象键值对是无序的,不一定按照顺序排列。取值时左侧会自动和右侧中属性名相同的匹配然后取值
- 例子,想取右侧a键值对中数组的某一项,如何取
//例1
let {b,a:[x,y,z]}={a:[1,2,3],b:"1,2,3"};
console.log(b,x,y,z);//b="1,2,3",x=1,b=2,c=3
//例2
let obj={s:{n:"1"},n:[1,"2",3,"4"],m:[[1]]};
let {m:[x1],s:{n},n:[,...m2]}=obj;//其中左侧要定义的变量是x1,n,m2
console.log(x1,n,m2);//x1=[1],n="1",m2=["2",3,"4"]
- 和数组一样,对象也有默认值
//左侧对象中属性名属性值(变量)相同能够省略时
let {a=1}={a:undefined};
console.log(a);//a=1
//左侧对象中属性名属性值(变量)不相同,不能够省略时
let {a:b=1}={a:undefined};
console.log(a);//b=1
//右侧不是对象,会默认将其转化为对象
let {x,y}=1;//x=undefined,y=undefined
//右侧如果是null,undefined会报错,这两个值无法转化为对象
let {x,y}=null;//报错
对象的属性名是字符串
var obj={
fn:function () {
},
//可以简写
fn1(){
}
};
- 判断两个值是否相等
Object.is(NaN,NaN);//true
- 合并对象,将Obj2合并到Obj1上,返回合并后的Obj1
Object.assign({a: 1}, {b: 2});//{a: 1, b: 2}