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 类需要啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章