Dav*_*eid 4 equality properties lodash reactjs react-redux
我的问题是,在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" }
}
Run Code Online (Sandbox Code Playgroud)
有人知道会发生什么吗?
Har*_*tel 12
_.isEquals:
在两个值之间进行深度比较以确定它们是否等效。如果值相等,则返回true,否则返回false。
例:
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,则它们严格相等。
- 如果两个对象引用相同的对象,则它们严格相等
例:
var object = { 'a': 1 };
var other = { 'a': 1 };
console.log(object === other);
// => falseRun Code Online (Sandbox Code Playgroud)
小智 0
在 javascript 中,当您使用 '===' 来比较对象时,如果是同一个对象,它只会返回 true,而如果对象相等,则 _.isEqual 将返回 true。
参考您的实际问题,我认为您应该使用 _.isEqual 来比较 2 个对象,看看它们是否是彼此的精确副本。
详细信息请参见: https: //lodash.com/docs#isEqual
| 归档时间: |
|
| 查看次数: |
7673 次 |
| 最近记录: |