为什么Knockout.js的默认等式比较器将非原始类型视为不相等?

从Knockout v2.1.0调试源代码:

ko.observable['fn'] = {
    "equalityComparer": function valuesArePrimitiveAndEqual(a, b) {
        var oldValueIsPrimitive = (a === null) || (typeof(a) in primitiveTypes);
        return oldValueIsPrimitive ? (a === b) : false;
    }
};

这对我来说似乎是不直观的,但是必须有一些原因史蒂夫·桑德森(Steve Sanderson)为了定义这一点而出路.为什么会这样呢?似乎不必要地触发更改通知.

最佳答案
这样做是因为如果你有一个可观察者拥有一个对象,Knockout不知道子属性是否被改变.

在这一点上,我们触发一个通知,以防其中一个对象的属性发生变化.

转载注明原文:为什么Knockout.js的默认等式比较器将非原始类型视为不相等? - 代码日志