【问题标题】: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 对象表示法实际上也是一个键值对数据的集合,这还不够吗?那么,有什么区别呢?

【问题讨论】:

    标签: javascript dictionary


    【解决方案1】:

    来自MDN

    比较对象和地图

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

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

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

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

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

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

    【讨论】:

    • 您至少可以复制复制粘贴中的格式。文章有项目符号列表等,更清晰。
    • 是的,刚刚编辑过 :)
    • 最好在最初发布时这样做,而不是在之后进行编辑。 (这适用于一般的回答。)
    猜你喜欢
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2015-07-11
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多