在翻看
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) { |
