【发布时间】:2019-07-29 22:58:43
【问题描述】:
这里有一些示例 Javascript (ES6) 代码,它并没有按照人们的直觉想象。
const exampleMap = new Map([[{a: 1}, 2]]);
console.log(exampleMap.get({a: 1}));
事实证明,这会打印出undefined。为什么?推理在this StackOverflow answer 中介绍。根据the MDN entry for Map,Map 使用=== 来表示密钥相等。并且,根据the MDN entry for ===,Objects 通过引用相等性进行比较。
这一切都很好。它完全按照文档所说的去做。不幸的是,上面的代码试图做的事情会非常有用,即使它不是规范中的实际行为。
如何使用Map,或者我应该使用什么来代替Map,来获取键值查找,其中键是通过对象深度相等语义进行比较的?
【问题讨论】:
-
“对象深度相等语义”?你是说字符串化?然后对其进行字符串化,一个简单的普通对象就可以了。
{a:1}在语义上与 javascript 中的{a:1}不同。