ES6方向:對(duì)象擴(kuò)展

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
執(zhí)行結(jié)果.png
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);
打印結(jié)果.png
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);
執(zhí)行結(jié)果.png
2.2.2、如果Object.assign()中只有一個(gè)參數(shù),Object.assign()會(huì)直接返回該參數(shù)
      let json = {
        name:'小陳同學(xué)'
      }
      let jsons = Object.assign(json);
      console.log(jsons);
執(zhí)行結(jié)果.png
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)
執(zhí)行結(jié)果.png

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);
      }
執(zhí)行結(jié)果.png
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);
      }
執(zhí)行結(jié)果.png
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);
      }

執(zhí)行結(jié)果.png

也可以使用解構(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);
打印結(jié)果.png

指向的是同一個(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)
執(zhí)行結(jié)果.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容