我正在学习Javascript,遇到了这个练习,这是我应该编写的“ deepEqual”函数,我无法解决,即使在看到解决方案后,我仍然还是不太了解。我不了解rewrite -> H in Hs
循环,尤其是Cannot change Hs, it is used in conclusion.
部分。为什么我不能只说for
或!deepEqual(a[key], b[key]))
?我从这一行中读到的是,“如果对象(keysA[key] !== keysB[key])
和(a[key] !== b[key])
中的键的值不出现在a
中,则b
”,但是这些值是在那里,它们存在,我看不出它们之间的比较在哪里。显然我错了,但这是我对代码的理解。请赐教。
deepEqual
答案 0 :(得分:0)
您不能说a[key] != b[key]
,因为这些值可以是对象。并且为了比较对象,您必须递归比较它们的内容-这就是您必须首先编写此deepEqual()
函数的全部原因。
该行:
if (!keysB.includes(key) || !deepEqual(a[key], b[key])) return false;
表示如果false
不具有b
作为属性,或者两个对象的key
属性都递归不相等,则返回key
。 / p>
如果该键确实存在,并且嵌套的对象相等,我们将继续使用下一个键进行循环。
在递归的根部进行的实际比较发生在第一行:
if (a === b) return true;