地图是对象,但对象内的值的类型是什么

问题描述

我最近在学习地图,当我尝试下面的代码时:

let a = [
    [false,1],['1','str1'],[1,'num1'],[true,'bool1']
]

let map1 = new Map(a);

console.log(map1);

输出我:

Map { false => 1,'1' => 'str1',1 => 'num1',true => 'bool1' }

所以我可以看到它是一个对象(由于 {})但是花括号内的值的类型是什么。我无法理解。所以请任何人告诉我值的类型是什么,我可以在不使用 get 方法的情况下从键中获取值。
顺便说一下,我使用 node js 来执行代码

解决方法

您看到的输出是一个格式约定,用于在控制台中检查时如何显示地图。映射实际上并不将键和值保存为自己的属性 - 相反,键和值被保存在内部,仅对 Map 实现的内部可用,它通过各种 Map 公开它们.values().keys().get() 等方法。

我可以在不使用 get 方法的情况下从键中获取值吗?

我想您可以使用 .entries() 将 Map 转换为一个数组,然后在该数组中查找匹配的键:

let a = [
    [false,1],['1','str1'],[1,'num1'],[true,'bool1']
]

let map1 = new Map(a);

const entries = [...map1.entries()];

const entry = entries.find(e => e[0] === 1);
console.log(entry[1]);

但这真的很奇怪。

没有使用 Map 的内置方法之一,就无法在 Map 上获取保存的值 - 但没关系,因为您应该总是使用处理 Map 的内置方法。继续使用.get