javascript - 为什么在运行时 key 未知时我应该使用 Map()?

标签 javascript ecmascript-6 es6-map

Map 上的 MDN 文档说:

If you're still not sure which one to use [object or map], ask yourself the following questions:

  • Are keys usually unknown until run time, do you need to look them up dynamically?

  • [...]

Those all are signs that you want a Map for a collection. [...] https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map

但我也可以使用方括号为对象动态设置键(即 myObject[dynamicKey])。

当我有动态键时使用 maps 是否还有其他原因,而不仅仅是为了“符合 map 目的”成为一个集合?

最佳答案

对任意键使用 Map 的原因是为了避免名称冲突。例如。使用普通对象:

let a = {};

function foo(key) {
  console.log(a[key] === undefined ? "Unset" : "Set");
  a[key] = "Hi";
  console.log(a[key]);
  console.log("" + a);
}

foo("goodKey");  // Unset, Hi, [object Object]
foo("toString"); // Set, Hi, TypeError: can't convert a to primitive type

上面我们与 Object.prototype.toString 发生了冲突。

使用 Map 我们没问题:

let a = new Map();

function foo(key) {
  console.log(a.get(key) === undefined ? "Unset" : "Set");
  a.set(key, "Hi");
  console.log(a.get(key));
  console.log("" + a);
}

foo("goodKey");  // Unset, Hi, [object Map]
foo("toString"); // Unset, Hi, [object Map]

关于javascript - 为什么在运行时 key 未知时我应该使用 Map()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41067835/

相关文章:

javascript - .then()方法返回的promise中 promise 了什么?

javascript - JQuery 查找带有数据对象的元素

javascript - 如何隐藏或显示输入标签?

javascript - 在这个例子中,基于 DOM 的 XSS 是可能的吗?

javascript - 停止生成器时,Break 如何在 for-of 循​​环中工作?

javascript - 匹配对象数组中的对象键并返回键,具有最高音量值的值

Javascript map 排序

javascript - 如何更改 Angular CLI 项目中的 Autoprefixer 选项?

javascript - react - 类型错误 : Cannot read property 'map' of undefined

javascript - 如何使用相同的组件值映射 2 个不同的数组?