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

posted on 2020-09-12 21:38  rainbowLover  阅读(5314)  评论(1编辑  收藏  举报