下面是一些示例 Javascript (ES6) 代码,它们不会按照直觉想象的那样做。
const exampleMap = new Map([[{a: 1}, 2]]);
console.log(exampleMap.get({a: 1}));
Run Code Online (Sandbox Code Playgroud)
事实证明,这会打印undefined. 为什么?这个 StackOverflow answer 中涵盖了推理。每对MDN条目地图,Map使用===为重点的平等。并且,根据的 MDN 条目===,Objects 通过引用相等进行比较。
这一切都很好。它完全按照文档所说的去做。不幸的是,上面的代码试图做的事情会非常有用,即使它不是规范的实际行为。
我如何使用Map,或者我应该使用什么来代替Map,来获得键值查找,其中键是通过对象深度相等语义进行比较的?
我一直在io.js中试验ES6 Map,并意识到我不能做到以下几点:
var map = new Map()
map.set( {key:"value"}, "some string");
map.get( {key:"value"} ); // undefined. I want "some string"
Run Code Online (Sandbox Code Playgroud)
这是因为{key:"value"} === {key:"value"}为false.
我需要能够使用一个对象作为键,但不需要ACTUAL对象来查找值,就像java HashMap如何使用hashcode和equals一样.这可能吗?