我的问题是,在比较componentWillReceiveProps生命周期方法中的nextProps和self.props字段时,lodash对等式和===的严格相等性的深度比较会返回不同的值。
这是我的具体例子 -
componentWillReceiveProps(nextProps){
(nextProps.obj === self.props.obj); // false
_.isEqual(nextProps.obj, self.props.obj); // true
typeof(nextProps.obj); // object
typeof(self.props.obj); // object
nextProps.obj; // { k1: "v1", k2: "v2", k3: "v3" }
self.props.obj; // { k1: "v1", k2: "v2", k3: "v3" }
}
有谁知道可能会发生什么?
答案 0 :(得分:7)
_。isEquals :
在两个值之间执行深度比较,以确定它们是否相同。如果值相等则返回true,否则返回false。
示例:
var object = { 'a': 1 };
var other = { 'a': 1 };
console.log(_.isEqual(object, other));

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
&#13;
=== :
对于严格相等,被比较的对象必须具有相同的类型并且:
比较必须具有相同的类型和:
- 当两个字符串具有相同的序列时,两个字符串严格相等 字符,长度相同,相同 相应位置的人物。
- 两个数字在数值上相等时严格相等(有 相同的数值)。 NaN不是 等于任何东西,包括NaN。 正负零相等 彼此。
- 如果两个布尔操作数都为真或两个,则它们严格相等 两者都是假的。
- 如果两个对象引用相同的对象
,则它们严格相等
示例:
var object = { 'a': 1 };
var other = { 'a': 1 };
console.log(object === other);
// => false
&#13;
答案 1 :(得分:0)
在javascript中使用&#39; ===&#39;比较对象然后只有当它是同一个对象时它才会返回true,而如果对象是等价的话,_.isEqual将返回true。
参考你的实际问题,我认为你应该使用_.isEqual比较2个对象,看看它们是否是彼此的确切副本。