Javascript For in-loop in递归函数未完成

Javascript For in-loop in递归函数未完成,javascript,recursion,Javascript,Recursion,我无法使for in循环在对象中的第一个属性之后继续工作。这是第4章中雄辩的JavaScript提出的问题: 编写一个函数deepEqual,它接受两个值并返回true 仅当它们是相同的值或具有相同属性的对象时 与递归函数相比,其值也相等的属性 呼唤平等 要了解是否通过身份比较两件事(使用=== 运算符)或通过查看其属性,可以使用 操作员类型。如果它为这两个值生成“对象”,则应该 做一个深入的比较。但你必须考虑一个愚蠢的例外 帐户:由于历史上的意外,typeof null也会生成“object”

我无法使for in循环在对象中的第一个属性之后继续工作。这是第4章中雄辩的JavaScript提出的问题:

编写一个函数deepEqual,它接受两个值并返回true 仅当它们是相同的值或具有相同属性的对象时 与递归函数相比,其值也相等的属性 呼唤平等

要了解是否通过身份比较两件事(使用=== 运算符)或通过查看其属性,可以使用 操作员类型。如果它为这两个值生成“对象”,则应该 做一个深入的比较。但你必须考虑一个愚蠢的例外 帐户:由于历史上的意外,typeof null也会生成“object”

这是我的密码:

function deepEqual(obj1, obj2) {
  if ((typeof obj1 === 'object' && obj1 != null) && (typeof obj2 === 'object' && obj2 != null)) {
    for (var property in obj1) {
      if (property in obj2) {
        return deepEqual(obj1[property], obj2[property])
      } else {
        return false;
      }
    }
  } else if (obj1 !== obj2) {
    return false;
  } else {
    return true;
  }
}

var obj = {object: 3, here: 1};
var obj2 = {object: 3, here: 2};

console.log(deepEqual(obj, obj2));

控制台返回true,因为“here”属性不相等,所以应该说false。当查看输出时,这是因为函数中的“for in-loop”在第一个属性之后退出。请帮助我解释为什么它没有继续循环。

for循环不能超出第一个属性,因为调用deepEqual时返回函数

 for (var property in obj1) {
      if (property in obj2) {
        // returning means no more looping....
        return deepEqual(obj1[property], obj2[property])
      } 

如果
deepEqual
返回其相等值,则要继续循环,如果其为false,则返回。

for循环无法移动到第一个属性之外,因为调用deepEqual时返回的是函数之外的属性

 for (var property in obj1) {
      if (property in obj2) {
        // returning means no more looping....
        return deepEqual(obj1[property], obj2[property])
      } 

如果
deepEqual
返回其相等值,或者如果其为false,则要继续循环。

感谢您的评论!您的回答很有道理,我通过将返回值替换为:
if(!deepEqual(obj1[property],obj2[property])return false来实现它。谢谢你的评论!您的回答很有道理,我通过将返回值替换为:
if(!deepEqual(obj1[property],obj2[property])return false来实现它