反应道具比较:" _。isEqual"与" ==="

时间:2018-05-02 02:40:30

标签: reactjs properties react-redux lodash equality

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

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

    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" }
    }
    

    有谁知道可能会发生什么?

2 个答案:

答案 0 :(得分:7)

_。isEquals

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

Lodash _.isEquals

示例:



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;
&#13;
&#13;

===

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

  

比较必须具有相同的类型和:

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

Comparison Operators - MDC

示例:

&#13;
&#13;
var object = { 'a': 1 };
var other = { 'a': 1 };
 
 
console.log(object === other);
// => false
&#13;
&#13;
&#13;

答案 1 :(得分:0)

在javascript中使用&#39; ===&#39;比较对象然后只有当它是同一个对象时它才会返回true,而如果对象是等价的话,_.isEqual将返回true。

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

详情请见: https://lodash.com/docs#isEqual