React道具比较:“ _。isEqual”与“ ===“

Dav*_*eid 4 equality properties lodash reactjs react-redux

我的问题是,在componentWillReceiveProps生命周期方法中比较nextProps和self.props的字段时,lodash对相等性的深入比较和===的严格相等性返回不同的值。

  1. 这是否意味着这些属性的值必须是不同的类型?我假设_.isEqual确实进行类型转换以比较相等性,因为===不会。
  2. 在nextProps和self.props的字段之间进行相等检查时,建议使用_.isEqual吗?

这是我的具体示例-

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" }
}
Run Code Online (Sandbox Code Playgroud)

有人知道会发生什么吗?

Har*_*tel 12

_.isEquals

在两个值之间进行深度比较以确定它们是否等效。如果值相等,则返回true,否则返回false。

Lodash _.isEquals

例:

var object = { 'a': 1 };
var other = { 'a': 1 };
 
console.log(_.isEqual(object, other));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

===

为了严格相等,要比较的对象必须具有相同的类型,并且:

比较的类型必须相同,并且:

  • 当两个字符串在相同位置具有相同的字符序列,相同的长度和相同的字符时,它们严格相等。
  • 当两个数字在数值上相等时(具有相同的数值)严格相等。NaN不等于任何事物,包括NaN。正零和负零彼此相等。
  • 如果两个布尔操作数都为true或均为false,则它们严格相等。
  • 如果两个对象引用相同的对象,则它们严格相等

比较运算符-MDC

例:

var object = { 'a': 1 };
var other = { 'a': 1 };
 
 
console.log(object === other);
// => false
Run Code Online (Sandbox Code Playgroud)


小智 0

在 javascript 中,当您使用 '===' 来比较对象时,如果是同一个对象,它只会返回 true,而如果对象相等,则 _.isEqual 将返回 true。

参考您的实际问题,我认为您应该使用 _.isEqual 来比较 2 个对象,看看它们是否是彼此的精确副本。

详细信息请参见: https: //lodash.com/docs#isEqual