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

何时使用{}上的映射[duplicate]

谷星文
2023-03-14

何时使用{}上的映射。使用Map可以完成的所有事情也可以使用{}实现,即Object,除了一件事是设置除string以外的其他类型的键。

var mp = new Map();    
mp.set(1, 'one');    
mp.set(2, 'two');    

var ob = {};    
ob[1] = 'one';    
ob[2] = 'two';    

console.log(mp);    
console.log(mp.get(1));    
console.log(typeof mp.keys().next().value);    

console.log(ob);    
console.log(ob[1]);    
console.log(typeof Object.keys(ob)[0]);

输出:

Map { 1 => 'one', 2 => 'two' }
one
number
{ '1': 'one', '2': 'two' }
one
string

当我可以使用其中任何一种方法做一些事情时,在什么情况下应该使用哪种方法。

共有3个答案

侯池暝
2023-03-14

来自MDN,

>

  • 对象有一个原型,因此地图中有默认关键点。这可以通过使用map=Object绕过。从ES5开始创建(null),但很少创建。

    对象的键是字符串和符号,而它们可以是映射的任何值,包括函数、对象和或任何基元。

    您可以使用size属性轻松获取Map的大小,而Object的大小必须手动确定。

    映射通常对于键不是字符串并且键值对经常被删除或添加的集合很有用。如果你的键是固定的比一个对象将更适合。

  • 刁远
    2023-03-14

    下面是我曾经遇到的一个bug:

    var scrabbled = {
      The: 6,
      word: 8,
      length: 10,
      is: 2,
      weird: 9
    };
    $.each(scrabbled, function(k, v) {
      console.log(k, v);
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    吴炎彬
    2023-03-14

    我相信mozilla文档足够具有描述性。

    映射对象是一个简单的键/值映射。任何值(对象和基元值)都可以用作键或值。

    比较对象和地图

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

    >

  • 对象有一个原型,因此地图中有默认关键点。这可以通过使用map=Object绕过。从ES5开始创建(null),但很少创建。

    对象的键是字符串和符号,而它们可以是映射的任何值,包括函数、对象和或任何基元。

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

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

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

  •  类似资料:
    • 我已经讨论过这个问题:如何使用Mockito在Spring中模拟自动构建的@Value字段?。我们如何模拟以下内容? 这样我们就可以在进行模拟时获取其价值?

    • 我得到了,我不知道我的错误在哪里。 错误出现在函数中。代码是: 控制器。JAVA 应用上下文如下: 这里有一个错误: [11/07/14 11.19.33:848 CEST]000000 4F servlet电子商务。国际商用机器公司ws。网络容器。servlet。ServletWrapper服务SRVE0068E:在uno dei metodi di servlet dispatcher nel

    • 问题内容: 我有一个带有复合键的实体,因此我使用@Embeddable和@EmbeddedId批注。可嵌入类如下所示: 以及使用它的实体: 现在,我想将该实体映射到另一个这样的实体中: 注意 的mappedBy =“id.admin” 是指 管理 字段中 DitaAdminAccountSkillPK 使用 ID 的字段 DitaAdminAccountSkill 。 这样可以编译运行。但是,在e

    • 我创建了一个对象,它映射了数据库中的两个表:字典表和令牌表。表示这两个表之间连接的对象(类)称为DictionaryToken。 下面是课程: 公共类DictionaryToken{private static Logger LOG=Logger.getLogger(DictionaryToken.class); 这是我的问题。除非我添加了一个条件,否则我可以使用带有这个对象的服务执行查询。下面是

    • 我有以下代码: 如果我想迭代Map,上面的代码工作得很好。但是现在我有这样的东西。 我想在映射中遍历映射,并获取它的键和值。我想得到key1、value1、key2、value2、key3、value3的值,依此类推。那我该怎么做呢?

    • 我希望我已经提供了所需的所有信息。在这个专家小组中,请大家在这个问题上帮助我。任何小小的帮助对我都是最大的帮助。提前感谢您的帮助。