1、對(duì)象
1、對(duì)象的書寫形式
let name = '小陳同學(xué)';
let age = 23;
let obj = {
name:name,
age:age,
fn:function(){
return this.name
}
}
//ES寫法
let obj = {
name,
age,
fn(){
return this.name
}
}
1.2、屬性名表達(dá)式
定義對(duì)象的屬性,有兩種方式
// 寫法一
obj.name = '小陳同學(xué)';
// 寫法二
obj['name'] = '小陳同學(xué)'
在ES6中拓展了ES5的缺陷,在使用字面量定義對(duì)象時(shí),ES5只允許第一種方式去定義,比如:
let obj = {
name:'小陳同學(xué)',
age:22
}
而ES6中拓展了它的定義方式,允許第二種方式去字面量的方式去定義對(duì)象
let obj = {
['name'] : '小陳同學(xué)',
['age']: 22
}
其次還允許這種方式去定義對(duì)象內(nèi)部的方法名
let obj = {
['name']:'小陳同學(xué)',
['fn'](){
return 1;
}
}
但是需要注意的是,這種寫法不支持簡寫,比如:
//第一種方式
let name = '小陳同學(xué)';
let age = 23;
//ES簡寫的寫法
let obj = {
name,
age,
fn(){
return this.name
}
}
console.log(obj.fn()); // 打印結(jié)果 小陳同學(xué)
// 第二種方式
let username = '小yu同學(xué)';
let userage = 22;
let obje = {
//切記不支持簡寫?。。?!
[username]:[username],
[userage]:[userage],
['fn'](){
return obje[username];
}
}
console.log(obje.fn())
第二種寫法一定不要去簡寫,會(huì)報(bào)錯(cuò)?。?!
2、對(duì)象新增
2.1、Object.is() 用來比較兩個(gè)值是否相等
ES5比較兩個(gè)值是否相等,只有兩個(gè)運(yùn)算符:相等運(yùn)算符(==)以及嚴(yán)格相等運(yùn)算符(===)。它們都有自身的缺點(diǎn),前者會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型,比如:123 == '123' 相等運(yùn)算符會(huì)自動(dòng)處理為true值,隱形的進(jìn)行了數(shù)據(jù)類型的轉(zhuǎn)換,而后者嚴(yán)格相等運(yùn)算符的NaN不等于自身,以及+0等于-0。
ES6提出同值相等算法,Object.is()就是部署這個(gè)算法的新方法,它用來比較兩個(gè)值是否嚴(yán)格相等,類似于嚴(yán)格相等運(yùn)算符(===)的提升。
let obj1 = Object.is(123,'123');
console.log(obj1);// false
let obj2 = Object.is(NaN,NaN);
console.log(obj2);// true
let obj3 = Object.is(+0,-0);
console.log(obj3);// false

2.2、Object.assign()用來合并對(duì)象的
使用方法:let 新對(duì)象 = Object.assign(目標(biāo)對(duì)象,需要合上的對(duì)象)
使用示例
let json = {
name:'小陳同學(xué)',
age:22,
addr:'湖南省長沙市'
}
let newjson = {
score:100,
isShow:true
}
let jsons = Object.assign(json,newjson);
console.log(jsons);

2.2.1、如果屬性名有重復(fù)的
如果在合并對(duì)象的時(shí)候?qū)傩悦兄貜?fù)的,那么后面的就會(huì)去覆蓋前面的
let json = {
name:'小陳同學(xué)',
age:22,
addr:'湖南省長沙市'
}
let newjson = {
name:'小yu同學(xué)',
addr:'安徽省蕪湖市',
score:100,
isShow:true
}
let jsons = Object.assign(json,newjson);
console.log(jsons);

2.2.2、如果Object.assign()中只有一個(gè)參數(shù),Object.assign()會(huì)直接返回該參數(shù)
let json = {
name:'小陳同學(xué)'
}
let jsons = Object.assign(json);
console.log(jsons);

2.2.3、由于undefined和null無法轉(zhuǎn)成對(duì)象,所以如果它們作為參數(shù),就會(huì)報(bào)錯(cuò)。
Object.assign(undefined)//報(bào)錯(cuò)
Object.assign(null)//報(bào)錯(cuò)
2.2.4、利用Object.assign()這個(gè)方法來拷貝數(shù)組
let arr = [1,2,3];
let array = new Set(Object.assign([],arr)); //為了能鏈?zhǔn)降娜ヌ砑釉?,偷個(gè)懶...
array.add(4).add(5).add(6).add(7).add(8);
console.log('新數(shù)組:',array);
console.log('舊數(shù)組:',arr)

3、Object.keys()、Object.entries()以及Object.values()
用于循環(huán)json和對(duì)象
3.1、Object.keys()
遍歷json的屬性
let json = {
name: "小yu同學(xué)",
addr: "安徽省蕪湖市",
score: 100,
isShow: true,
};
for(let item of Object.keys(json)){
console.log(item);
}

3.2、Object.values()
遍歷json的屬性值
let json = {
name: "小yu同學(xué)",
addr: "安徽省蕪湖市",
score: 100,
isShow: true,
};
for(let item of Object.values(json)){
console.log(item);
}

3.3、Object.entries()
遍歷鍵值對(duì)
let json = {
name: "小yu同學(xué)",
addr: "安徽省蕪湖市",
score: 100,
isShow: true,
};
for(let item of Object.entries(json)){
console.log(item);
}

也可以使用解構(gòu)去做
let {keys,values,entries} =Object
let json = {
name: "小yu同學(xué)",
addr: "安徽省蕪湖市",
score: 100,
isShow: true,
};
for(let item of keys(json)){
console.log(item); //name addr score isShow
}
for(let item of values(json)){
console.log(item);//小yu同學(xué) 安徽省蕪湖市 100 true
}
for(let item of entries(json)){
console.log(item);//[name: "小yu同學(xué)"] [addr: "安徽省蕪湖市"] [score: 100] [isShow: true],
}
4、對(duì)象的擴(kuò)展運(yùn)算符
4.1、解構(gòu)賦值與...(擴(kuò)展運(yùn)算符)
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x // 1
y // 2
z // { a: 3, b: 4 }
由于解構(gòu)需要等號(hào)兩邊匹配一致,因此,左邊是對(duì)象,而右邊不是一個(gè)對(duì)象,那么就會(huì)出現(xiàn)報(bào)錯(cuò)。
4.1.1、解構(gòu)賦值必須要放到最后一個(gè)參數(shù),否則報(bào)錯(cuò)
let {...x,y,z} = obj //報(bào)錯(cuò)
let {x,...y,...z} = obj //報(bào)錯(cuò)
let {x,y,...z} = obj //正確
注意:解構(gòu)賦值的拷貝是淺拷貝,即如果一個(gè)鍵的值是復(fù)合類型的值(數(shù)組、對(duì)象或是函數(shù)),那么解構(gòu)賦值拷貝的是這個(gè)值的引用,而不是這個(gè)值的副本。比如:
let obj = {
name:'小陳',
age:22,
x:{
addr:'安徽省蕪湖市'
}
}
console.log(obj.x.addr);
let {x,...b} = obj;
console.log(x.addr);

指向的是同一個(gè)引用對(duì)象
4.1.2、擴(kuò)展運(yùn)算符可以拷貝對(duì)象
擴(kuò)展運(yùn)算符可以拷貝對(duì)象用于取出參數(shù)對(duì)象的所有可遍歷的屬性,拷貝到當(dāng)前對(duì)象之中。
let a = {x:1,y:2,z:3}
let c = {...a};
console.log(c)
