为什么Map()=== Map()评估为true?

时间:2019-02-22 19:41:44

标签: javascript immutable.js

在ImmutableJS中,两个不同的空映射对象的值为true。为什么会这样呢?我认为这与基于哈希的比较或类似的事情有关。

2 个答案:

答案 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。