为什么使用 ES6 Map 而不是普通的 javascript 对象?

问题描述 投票:0回答:2

如果我们可以用普通的 javascript 对象创建键/值对,那么使用新的 ES6

Map
对象的原因是什么?

我什么时候应该使用其中一种,什么时候应该使用另一种? Map 仅限于值还是也可以包含函数?

javascript ecmascript-6
2个回答
21
投票
  1. 任何东西都可以用作地图中的键。
  2. 地图是有序的,并且允许迭代。

结合 1 和 2,当您迭代映射时,您将获得一个有用的键值对数组!

查看

map.prototype.forEach()
文档

来源:另一个很好的问题/答案交流。值得将此标记为重复项。

更新: 添加到此答案以直接解决问题:
每当您需要将事物关联在一起或保留插入顺序时,您应该使用映射(常见数据结构需要这个)。

当你不需要这样做时,你可以使用一个对象,但它们只是做不同的事情。

更新2: OP问功能是否也可以。是的,因为值也可以是函数!检查一下:

let x = new Map();
let y = () => {
  console.log('derp');
}
x.set(y, "HI");
console.log(x.get(y)); // will log "HI"

有关更多信息,请查看这句话的来源,在 Eloquent JavaScript 的精彩章节中:
“每个值都有一个类型决定其作用。JavaScript 中有六种基本值类型:数字、字符串、布尔值、对象、函数和未定义值。”

此外,Map 和 Object 之间的主要区别,来自 MDN,标题“Objects and Maps Comparison”下:

  1. 对象有原型,因此映射中有默认键。但是,可以使用 map = Object.create(null) 绕过这个问题。
  2. 对象的键是字符串,它们可以是映射的任何值。
  3. 您可以轻松获取地图的大小,而您必须手动跟踪对象的大小。

再次强调,键可以是任何值


14
投票
  • 地图已订购。
  • 地图键不必是字符串
  • Map 有一个
    size
    属性来跟踪对的数量
© www.soinside.com 2019 - 2024. All rights reserved.