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/