Javascript 6中的字典和地图有什么区别?

Jay*_*Jay 3 javascript ecmascript-6

Map如何与字典/对象不同?

换句话说,let x = {}和之间有什么区别let x = new Map()

Thi*_*ilo 6

比较对象和地图(来自MDN):

对象类似于Maps,它们都允许您将键设置为值,检索这些值,删除键以及检测某些键是否存储在键中.正因为如此(并且因为没有内置替代品),所以对象在历史上被用作地图; 但是,对象和地图之间存在重要差异,这使得使用地图更好:

  • Object有一个原型,因此地图中有默认键.这可以通过使用自ES5以来的map = Object.create(null)来绕过,但很少完成.
  • Object的键是字符串和符号,它们可以是Map的任何值.
  • 您必须手动跟踪对象的大小,才能轻松获得Map的大小.

这并不意味着你应该到处使用地图,在大多数情况下仍然使用对象.地图实例仅对集合有用,您应该考虑调整您以前使用过的对象的代码.对象应用作记录,包括字段和方法.如果您仍然不确定使用哪一个,请问自己以下问题:

  • 密钥在运行时通常是未知的,您是否需要动态查找它们?
  • 所有值都具有相同的类型,可以互换使用吗?
  • 你需要不是字符串的键吗?
  • 是否经常添加或删除键值对?
  • 您是否有任意(容易变化)的键值对?
  • 该集合是否重复?

这些都是你想要一个集合的地图的迹象.如果相反,你有一定数量的键,单独操作它们,并区分它们的用法,那么你想要一个对象.

  • 另一件可能非常重要的事情是 Map 内容被 `JSON.stringify()` 忽略 (2认同)