关于对象的深度比较的问题已经被问到了,我有解决方案。但是在解决方案中有一行代码我不完全理解。
这是解决方案,它是Eloquent JS第四章中一个关于比较对象的问题。除了这一行代码之外,我都能理解:
它位于底部。以下是完整的功能代码:
```html
这是解决方案,它是Eloquent JS第四章中一个关于比较对象的问题。除了这一行代码之外,我都能理解:
if (!(prop in a) || !deepEqual(a[prop], b[prop]))
它位于底部。以下是完整的功能代码:
```html
它位于底部。以下是完整的功能代码:
```function deepEqual(a, b) {
if (a === b) return true;
if (a == null || typeof a != "object" ||
b == null || typeof b != "object")
return false;
var propsInA = 0, propsInB = 0;
for (var prop in a)
propsInA += 1;
for (var prop in b) {
propsInB += 1;
if (!(prop in a) || !deepEqual(a[prop], b[prop]))
return false;
}
return propsInA == propsInB;
}
“if (!(prop in a)”是在比较'b'对象在该索引处是否存在属性,还是在比较值?
关于第二部分的问题也一样,但我知道答案不同: !deepEqual(a[prop], b[prop])
进行了何种比较(例如,true或false)? 我理解递归,但与我的上一个问题一样,这是在进行“存在性”比较,还是在比较值中的信息?
预先感谢。