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

Why does Map() === Map() evaluate to true?

在 ImmutableJS 中,两个不同的空映射对象的计算结果为 true。为什么会这样?我认为它与基于散列或类似东西的比较有关。

您可以通过在代码中添加一些虚拟对象来解决这个问题,例如:

const dummy = {key: "I am a dummy object"}

并在创建新地图时始终将其作为参数传递。这不是理想的解决方案,但在将一个与另一个进行比较时肯定会 return 错误,即使两者都是使用同一对象创建的。

它既不是散列也不是任何其他类型的 "magic",immutablejs returns 两个调用的引用完全相同。

例如,这是它处理空地图的方式。它将空映射分配给它自己的 "global" 范围并始终重新利用相同的引用。

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