js對象和map的區別


看一道對象和map的題:

  function test1(){
      var a={},b='123',c=123;
      a[b]="b";
      a[c]="c";
      console.log('a :>> ', a);// {123:"c"}
      console.log('a[b] :>> ', a[b]);
      // 斷言 c 
      // 正確
    }
    function test2(){
      var a={};
      var b = Symbol('123')
      var c = Symbol('123')
      a[b]='b'
      a[c]='c'
      console.log('a :>> ', a);//{SSymbol(123):'b',Symbol(123):'c'}
      console.log('a[b] :>> ', a[b]);
      // 斷言 b
      // 正確
    }
    function test3(){
      var a={};
      var b = {key:'123'}
      var c = {key:'456'}
      a[b]='b'
      a[c]='c'
      console.log('a :>> ', a);// {[Object Object]:"c"}
      console.log('a[b] :>> ', a[b]);
      // 斷言 c
      // 正確
    }
    // test1()
    // test2()
    // test3()

然后問 如果把對象換成Map結果是什么樣的?

    function test11(){
      var a=new Map(),b='123',c=123;
      a.set(b,"b")
      a.set(c,"c")
      console.log('a :>> ', a);// 卧槽
      console.log('a[b] :>> ', a.get(b));
      // 斷言 b
      // 結果 b
    }
    function test22(){
      var a=new Map();
      var b = Symbol('123')
      var c = Symbol('123')
      a.set(b,"b")
      a.set(c,"c")
      console.log('a :>> ', a);// wc
      console.log('a[b] :>> ', a.get(b));
      // 斷言 b
      // 正確
    }
    function test33(){
      var a=new Map();
      var b = {key:'123'}
      var c = {key:'456'}
      a.set(b,"b")
      a.set(c,"c")
      console.log('a :>> ', a);// wc
      console.log('a[b] :>> ', a.get(b));
      // 斷言 b
      // 結果 b
    }
    test11()
    test22()
    test33()

然后截圖看看a吧:

最后想說的是:

對象和Map的區別就是:

  對象的key是字符串或者是Symbol,map的key可以是任何類型;

  用法不一樣,你要還是a[b]="b",這樣賦值取值 ,那結果不會變和對象時一樣。

 

over


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM