📜  JavaScript 中的映射与对象

📅  最后修改于: 2022-05-13 01:56:22.612000             🧑  作者: Mango

JavaScript 中的映射与对象

Map是一种数据结构,有助于以对的形式存储数据。该对由一个唯一键和一个映射到该键的值组成。它有助于防止重复。
Object遵循与 map 相同的概念,即使用键值对存储数据。但是有一些细微的差别使得 map 在某些情况下表现更好。

几个基本的区别如下:

  1. 在 Object 中,key-field 的数据类型被限制为整数、字符串和符号。而在 Map 中,key-field 可以是任何数据类型(整数、数组,甚至是对象!)
  2. 在 Map 中,元素的原始顺序被保留。对于对象,情况并非如此。
  3. Map 是一个对象的实例,但反之亦然。

例子:


输出:

true
false

让我们深入探讨一些使 Object 与 Map 不同的概念。

  1. 宣言:
    在 JavaScript 中,有很多方法可以创建对象。例如:
    • 通过使用直接字面量:
      var obj = {};
      var obj = {1:"Object Name", 2:"Test"};
      console.log(obj);
      

      输出:

      Object
    • 构造函数的使用:
      var obj = new Object(); //Empty object
      var obj = new Object;
      console.log(obj);
      

      输出:

      Object
    • 使用 object.create
      function fruits() {
              this.name = 'fruit 1';
              this.season = 'summer';
              }
        
              function apple() {
              fruits.call(this);
              }
        
              apple.prototype = Object.create(fruits.prototype);
              const app = new apple();
              console.log(app.name);
              console.log(app.season);
      
      fruit 1
      summer

      另一方面,地图只有一种创建方式。

    • var map = new Map();//Empty
      console.log(map);
      var map = new Map([[1, "Sam"], [2, "John"]]); // 1-> Sam, 2->John
      console.log(map);
      

      输出:

      Map(0)
      Map(2)
  2. 访问元素:
    • Map 使用其内置的get() 方法来访问其元素。
      map.get(1);
    • 对象只需使用带有点运算符的“键”名称来访问其元素。
      obj.id;
      obj[id];
  3. 检查密钥是否已存在:
    • Map 为此使用了它的内置 has()函数。
      map.has(1);//returns boolean value true or false.
    • 对象使用 '==='运算符来执行任务。
      var doExist = obj.1 === undefined; //returns boolean value.
  4. 添加新元素:
    • Map 使用 set() 方法添加新元素。
      map.set(4, 5); //{5->4, 7->9, 4->5}
    • 在对象中,它是直接完成的。
      obj["Demo"]="Map vs Object"; //{1->Object Name, 2->Test, Demo->Map vs Object}
  5. 获取尺寸:
    • 地图会自动更新其大小并获得最简单的。
      console.log(map.size);
    • 在 object 中,需要使用帮助 Object.keys() 手动计算大小。
      console.log(Object.keys(obj).length);

因此,我们可以看到 Map 具有更好的性能和更少的代码结构,这使其优于 Object。但是,有些场景需要使用对象。让我们看看。
何时何地使用对象:

  • 对于我们需要简单的结构来存储数据并且所需的键类型是整数、字符串或符号的情况,对象是一个很好的选择。
  • 需要对单个属性元素应用单独逻辑的场景,对象绝对是首选。
  • JSON 直接支持对象,但不支持 map(还)。
  • Map 完全是散列,而 Object 不止于此。

尽管 Map 往往比对象具有更多优势,但最终它取决于所使用的数据类型和需要执行的操作。
然而,在 map 优于 object 的所有优点中,map 不能替换 JavaScript 中的 object,因为 Object 不仅仅是一个哈希表。如果存在其他选择,则不应仅将其用于散列。