ES6 中的 Map 类需要啥? [复制]

Posted

技术标签:

【中文标题】ES6 中的 Map 类需要啥? [复制]【英文标题】:What's the need of a Map class in ES6? [duplicate]ES6 中的 Map 类需要什么? [复制] 【发布时间】:2016-12-21 15:13:55 【问题描述】:

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

【问题讨论】:

【参考方案1】:

来自MDN:

比较对象和地图

对象与 Map 类似,都允许您将键设置为值、检索这些值、删除键以及检测键中是否存储了某些内容。正因为如此(并且因为没有内置的替代品),对象在历史上一直被用作地图;然而,Objects 和 Maps 之间的重要区别使得使用 Map 更好:

一个对象有一个原型,所以映射中有默认键。从 ES5 开始,这可以通过使用 map = Object.create(null) 绕过,但很少这样做。 Object 的键是字符串和符号,它们可以是 Map 的任何值。 您可以轻松获取地图的大小,而您必须手动跟踪对象的大小。

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

密钥在运行时通常是未知的,您是否需要动态查找它们? 是否所有值都具有相同的类型,并且可以互换使用? 您需要不是字符串的键吗? 是否经常添加或删除键值对? 您是否有任意数量(易于更改)的键值对? 集合是否迭代?

这些都是你想要一个集合的地图的迹象。相反,如果您有固定数量的键,分别对它们进行操作并区分它们的用途,那么您需要一个对象。

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

【讨论】:

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

以上是关于ES6 中的 Map 类需要啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

这是啥 '?' #map 中的运算符在做啥? [复制]

用ES5模拟实现ES6中的Map类

ES6中的Set和Map集合

ES6中的Set和Map集合

JS中的数据类型,包含ES6,set和map等等

在 Javascript 中使用 Map over Object 有啥缺点吗?