【问题标题】:what is difference between object and map object in Javascript? [duplicate]Javascript中的对象和地图对象有什么区别? [复制]
【发布时间】:2020-09-28 14:55:18
【问题描述】:

let m = new Map();

let obj = {};

let keyString = 'a string';
let keyObj = {};
let keyFunc = function() {};

obj[keyObj] = 'object inside object as keys!';
obj[keyFunc] = function() {}


m.set(keyObj, 'object');
m.set(keyFunc, 'function');


console.log(typeof obj[keyObj]); // type = string
console.log(typeof obj[keyFunc]); // type = function 
console.log(typeof m.get(keyObj)); // type = string 
console.log(typeof m.get(keyFunc)); // type = string 
console.log(m.get(keyObj)) //  object
console.log(m.get(keyFunc)) //  function

那么地图和对象有什么区别呢? map 还将键类型转换为字符串。

【问题讨论】:

  • "map 还将键类型转换为字符串。" 它没有!它通过设计明确地保留它们的类型。
  • typeof m.get(keyObj) 返回键的值。与typeof "object"相同。

标签: javascript ecmascript-6


【解决方案1】:

Map 是一种数据结构,有助于以对的形式存储数据。该对由一个唯一键和一个映射到该键的值组成。它有助于防止重复。

Object 遵循与 map 相同的概念,即使用键值对来存储数据。但是有些细微的差别使得地图在某些情况下表现更好。

几个基本区别如下:

  • 在 Object 中,key-field 的数据类型限制为整数, 字符串和符号。而在 Map 中,key-field 可以是任何 数据类型(整数、数组,甚至是对象!)
  • 在地图中,元素的原始顺序被保留。这不是 如果是对象,则为 true。
  • 地图是对象的一个​​实例,但反之亦然。

【讨论】:

  • "在 Object 中,key-field 的数据类型仅限于整数、字符串和符号。" - 只有字符串和符号。您不能将数字作为键,它会被转换。在少数情况下,“数字”键的处理方式不同,但它们仍然是包含非负整数的 字符串
猜你喜欢
  • 2011-04-27
  • 2011-09-23
  • 2020-07-26
  • 1970-01-01
  • 2020-02-06
  • 2012-07-06
相关资源
最近更新 更多