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

前端之家收集整理的这篇文章主要介绍了为什么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不知道子属性是否被改变.

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

猜你在找的JavaScript相关文章