我可以总是使用 Map.equals() 比较两个 Immutable.Map 吗?计算复杂度真的不同于两个相同对象上的“===”?

Dam*_* Fa 0 complexity-theory dictionary equals immutable.js

我想了解 Immutable.equals() 的计算复杂度。我还没有通过阅读源代码清楚地找到我的答案,在网络讨论中也没有......

var obj1 = Immutable.Map({a: 1, b: 2, c: 'lot of entries'});
var obj2 = obj1.set('a', 1); 
Run Code Online (Sandbox Code Playgroud)

是否obj1.equals(obj2)会比较即使有平等的对象的每个关键?
如果它比较每个键,我最好将它与obj1===obj2.
在比较对象的每个键/值之前,Immutable 是否验证 === 相等?
在两个相同对象的情况下,了解 Immutable.equals() 和 === 运算符的计算复杂度之间是否存在很大差异会很有趣。

Gre*_*vis 5

这里有两个概念在起作用:身份和平等。当双方都引用同一个对象时,===on Objects 返回true。例如:

var x = {};
var y = {};
var z = x;

# x and y have the same keys and values but are two different objects.
x === y # => false

# x and z refer to the same object
x === z # => true
Run Code Online (Sandbox Code Playgroud)

我们可以得出结论,如果xy引用同一个对象,那么它们应该是相等的。这的确是怎样immutable.js比较两个对象时做

反过来就不对了。您可以有两个不相同的相等对象。最简单的例子是:

var x = new Map({ name: 'Greg' });
var y = new Map({ name: 'Greg' });

# x and y are two different objects
x === y # => false

# x and y are equal, i.e. they have equal keys and values
x.equals(y) # => true
Run Code Online (Sandbox Code Playgroud)

总结一下:(equals由 实现immutable.js)总是进行===检查,因此它至少需要相同的时间。你需要记住平等的身份和使用任何的区别===equals相应