当前位置: 首页 > 知识库问答 >
问题:

ES6中需要什么样的Map类?[副本]

谷梁翰飞
2023-03-14

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

共有1个答案

辛龙野
2023-03-14

来自MDN:

比较对象和地图

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

  • 一个对象有一个原型,所以在地图中有默认的键。这可以通过使用map=Object.create(null)绕过ES5,但很少这样做。
  • 对象的键是字符串和符号,它们可以是地图的任何值。
  • 你可以很容易地得到地图的大小,而你必须手动跟踪对象的大小。

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

  • 密钥在运行时之前通常是未知的,您需要动态地查找它们吗

这些都是你想要收藏地图的标志。相反,如果您有固定数量的键,单独操作它们,并区分它们的用法,那么您需要一个对象。

对我个人来说,最重要的是支持任何类型的价值观,如键,而不仅仅是字符串。

 类似资料:
  • 我有一个方法,它检查一个对象是否已经存在于数组列表中,如果存在,则用新对象替换索引,如果不存在,则添加新对象。 当我编写方法时,我没有返回类型。我收到一个错误,建议我将返回类型设置为void,所以我就这样做了。然后我得到了另一个错误,返回类型必须是布尔的。我唯一的问题是方法本身本质上(至少对我来说)不是true/false返回。我需要它做的只是在ArrayList中添加/替换一个对象,而不是返回任

  • 我必须在下面的地图中输入一个整数值。 当我运行上面的代码我得到下面的错误,有人能帮我吗

  • 我想学习更多关于图和Dijkstra算法的知识,所以我有一个函数,可以随机生成加权无向图,保存在如下文件中: 然后我运行Dijkstra,输出从节点0到所有其他节点的距离,但有时从节点0到其他节点的距离是0,这意味着从节点0到该节点没有连接<我还有另一个问题,Dijkstra的作品是什么样的?

  • 我目前正在学习Java的继承,我在理解它方面遇到了很大的困难,但是我不能理解的一个主要问题是为什么在下面的示例中有必要调用一个超类构造函数,它有什么帮助?此示例来自Oracle的方法教程。 我最初的想法是,会缩短当前构造函数中参数的代码,它只会接受父类中传入的值并将其添加到子类中(如下所示): 但是,正如我已经知道的那样,这是错误的,并且再次将我带到了真正做什么的问题上。我会非常感谢一些形式的解释

  • 我上了Java的课程,正在努力自学C和K 在Java中,您可以声明一个类似于公共静态浮点转换(int f)的函数,而不需要原型。这对我来说似乎简单得多。为什么会有差异?

  • 这里是SQL初学者,在我的大学课程中,我们有以下模式。 学生(snum:整数,sname:字符串,专业:字符串,级别:字符串,年龄:整数) 类(名称:字符串,meets_at:字符串,房间:字符串,fid:整数) 已注册(snum:整数,cname:字符串) 教员(fid:整数,fname:字符串,deptid:整数) 其中一个练习如下: 找出同时参加两个班的所有学生的名字。 下面是它的SQL语句