在ImmutableJS中,两个不同的空映射对象的值为true。为什么会这样呢?我认为这与基于哈希的比较或类似的事情有关。
答案 0 :(得分:3)
这既不是散列,也不是任何其他类型的“魔术”,immutablejs
会为两个调用返回完全相同的引用。
例如,这就是它处理空白地图的方式。它将空映射分配给自己的“全局”范围,并始终重新使用相同的引用。
let EMPTY_MAP;
export function emptyMap() {
return EMPTY_MAP || (EMPTY_MAP = makeMap(0));
}
https://github.com/immutable-js/immutable-js/blob/master/src/Map.js#L637
答案 1 :(得分:1)
您可以通过在代码中添加一些虚拟对象来解决此问题,例如:
const dummy = {key: "I am a dummy object"}
,并在创建新地图时始终将其作为参数传递。这不是理想的解决方案,但即使将两者进行比较,即使两者都是使用同一对象创建的,也肯定会返回false。