Javascript 什么';ES6中需要一个Map类吗?

Javascript 什么';ES6中需要一个Map类吗?,javascript,dictionary,Javascript,Dictionary,ES6标准的一个新特性是Map类,用于创建数据的键:值集合。好,对。但是,为什么Javascript需要这样一个类呢?JS对象表示法实际上也是数据的键:值集合,这还不够吗?那么,有什么区别呢 来自: 比较对象和贴图 对象与贴图类似,都允许您将关键点设置为值、检索这些值、删除关键点以及检测某个关键点是否存储了内容。正因为如此(也因为没有内置的替代品),历史上物体一直被用作地图;但是,对象和贴图之间存在一些重要的差异,这些差异使使用贴图变得更好: 对象有一个原型,因此地图中有默认关键点。从ES5开

ES6标准的一个新特性是Map类,用于创建数据的键:值集合。好,对。但是,为什么Javascript需要这样一个类呢?JS对象表示法实际上也是数据的键:值集合,这还不够吗?那么,有什么区别呢

来自:

比较对象和贴图

对象与贴图类似,都允许您将关键点设置为值、检索这些值、删除关键点以及检测某个关键点是否存储了内容。正因为如此(也因为没有内置的替代品),历史上物体一直被用作地图;但是,对象和贴图之间存在一些重要的差异,这些差异使使用贴图变得更好:

  • 对象有一个原型,因此地图中有默认关键点。从ES5开始,可以通过使用
    map=Object.create(null)
    绕过这一点,但很少这样做
  • 对象的键是字符串和符号,它们可以是地图的任何值
  • 当您必须手动跟踪对象的大小时,您可以轻松获得贴图的大小
这并不意味着您应该在任何地方使用贴图,大多数情况下仍然使用对象。映射实例只对集合有用,您应该考虑在以前使用对象的代码中修改代码。应使用对象作为记录,包括字段和方法。 如果您仍然不确定使用哪一个,请问自己以下问题:

  • 密钥在运行时之前通常是未知的,您需要动态地查找它们吗
  • 所有值是否具有相同的类型,并且可以互换使用
  • 你需要不是字符串的键吗
  • 是否经常添加或删除键值对
  • 您是否有任意数量(易于更改)的键值对
  • 集合是否迭代
这些都是你想要收藏地图的标志。相反,如果您有固定数量的键,单独操作它们,并区分它们的用法,那么您需要一个对象

就我个人而言,最重要的是支持任何类型的值作为键,而不仅仅是字符串。

来自:

比较对象和贴图

对象与贴图类似,都允许您将关键点设置为值、检索这些值、删除关键点以及检测某个关键点是否存储了内容。正因为如此(也因为没有内置的替代品),历史上物体一直被用作地图;但是,对象和贴图之间存在一些重要的差异,这些差异使使用贴图变得更好:

  • 对象有一个原型,因此地图中有默认关键点。从ES5开始,可以通过使用
    map=Object.create(null)
    绕过这一点,但很少这样做
  • 对象的键是字符串和符号,它们可以是地图的任何值
  • 当您必须手动跟踪对象的大小时,您可以轻松获得贴图的大小
这并不意味着您应该在任何地方使用贴图,大多数情况下仍然使用对象。映射实例只对集合有用,您应该考虑在以前使用对象的代码中修改代码。应使用对象作为记录,包括字段和方法。 如果您仍然不确定使用哪一个,请问自己以下问题:

  • 密钥在运行时之前通常是未知的,您需要动态地查找它们吗
  • 所有值是否具有相同的类型,并且可以互换使用
  • 你需要不是字符串的键吗
  • 是否经常添加或删除键值对
  • 您是否有任意数量(易于更改)的键值对
  • 集合是否迭代
这些都是你想要收藏地图的标志。相反,如果您有固定数量的键,单独操作它们,并区分它们的用法,那么您需要一个对象


就我个人而言,最重要的是支持任何类型的值作为键,而不仅仅是字符串。

您至少可以在复制和粘贴中复制格式。这篇文章有项目符号列表等等,更清晰。是的,刚刚编辑:)最好在最初发布时进行,而不是在发布后进行编辑。(这适用于一般的回答。)您至少可以复制复制粘贴中的格式。这篇文章有项目符号列表等等,更清晰。是的,刚刚编辑:)最好在最初发布时进行,而不是在发布后进行编辑。(这通常适用于回答。)