Immutable.js的比较如何运作?

时间:2015-08-03 15:45:00

标签: javascript functional-programming immutability immutable.js

我一直在使用Immutable.js,刚才我发现比较运算符并没有按照我的想法运作。

我的代码很简单:

a = Immutable.Map({a:1, b:[1,2,3]})
b = Immutable.Map({a:1, b:[1,2,3]})
a == b // false
Immutable.is(a, b) // false

有没有办法比较两个相同的Immutable对象并得到true

功能逻辑告诉我它们应该是平等的,但在JavaScript中它们不是。

2 个答案:

答案 0 :(得分:3)

a == b基本上比较"地址"两个对象。 在您的代码中,您创建了两个不同的对象实例,因此它们总是不同的,因此JavaScript规范中a == b为false。

至于如何比较JS中的两个对象,请检查: Object comparison in JavaScript

答案 1 :(得分:0)

(function () {
  var c = [1,2,3],
      a = Immutable.Map({a:1, b: c}),
      b = Immutable.Map({a:1, b:[1,2,3]});
  c[0] = 9;

  console.log(JSON.stringify(a), JSON.stringify(b));
}());

如上所示,如果您保留了对内部数组的引用(例如a),则创建bc的方式会产生副作用。

我认为比较正确地告诉你对象不一样。