==
会进行类型转换的比较
===
不会转化类型
浅比较
循环数组或对象(只循环最外层),比较key对应的value是否相等 (不在乎引用), 当然 key的长度也必须要一样
深相等
两个对象或数组完全相等 (不在乎引用)
object.is()
Object.is()
方法判断两个值是否为同一个值。如果满足以下条件则两个值相等:
与==
运算_不同。_ ==
运算符在判断相等前对两边的变量(如果它们不是同一类型) 进行强制转换 (这种行为的结果会将 "" == false
判断为 true
), 而 Object.is
不会强制转换两边的值。 与===
运算也不相同。 ===
运算符 (也包括 ==
运算符) 将数字 -0
和 +0
视为相等 ,而将Number.NaN
与NaN
视为不相等.
为什么react-redux 的 useSelector 使用 === 比较两次state是否相等?
javascript - Strict Equality (===) versus Shallow Equality Checks in React-Redux - Stack Overflow useSelector 一般是返回一个非复合的量 如: const x= useSelector(state=>state.user.name) 而mapStateToProps一般是返回一个复合量 如:
const mapStateToProps = state => (
{keyA: state.reducerA.keyA, keyB: state.reducerB.keyB}
);
useSelector使用 === 来比较新旧值更合理
如果useSelector返回一个复合的值, 则需要添加 shallowEqual
如
import { shallowEqual } from 'react-redux'
const x = useSelector(state => ({a:state.a, b:state.b}), shallowEqual)