在翻看
react-redux
源码中的一段工具函数代码时候,对其中的逻辑有一丝迷惑,后科学上网一波得到了我想要的答案。本文是一篇关于Object.is
、==
、===
的逻辑梳理。
react-redux
库的浅层比较文件(shallowEqual.js
)内的工具方法is
其实就是现在ES6的Object.is
方法的polyfill
实现,在MDN上我们也可以看到对应的算法描述。
根据上述算法,我们可以发现其实==
和===
对值的判断主要有三点不准确的:
1⃣️:在==
情景下,发生了隐式转化;
2⃣️:在===
情景下,+0
和-0
比较返回了true
;
3⃣️:在===
情景下,NAN
和NAN
比较返回了false
。
综上,我们要做到完全判断是否相同(对象引用地址指向相同),做如下实现即可:
1 | if (!Object.is) { |