我一直在使用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中它们不是。
答案 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
),则创建b
和c
的方式会产生副作用。
我认为比较正确地告诉你对象不一样。