从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;
}
};
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不直观,但必须有一些理由让史蒂夫桑德森不顾一切地定义这个.为什么会这样呢?它似乎不必要地触发更改通知.
这样做是因为如果您有一个包含对象的可观察对象,Knockout 不知道子属性是否已更改。
此时,我们会在对象的某个属性发生更改时触发通知。