我不能让我的for循环继续在我的对象中的第一个属性之后工作。这是第4章中Eloquent JavaScript的一个问题:
编写一个函数deepEqual,它接受两个值并返回true 只有它们是相同的值或具有相同的对象 与递归相比,其值也相等的属性 打电话给deepEqual。
要确定是否按身份比较两件事(使用=== 操作员)或通过查看他们的属性,你可以使用 typeof运算符。如果它为两个值产生“对象”,你应该 做一个深刻的比较。但你必须把一个愚蠢的例外 帐户:由于历史事故,typeof null也会产生“对象”。
这是我的代码:
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'在第一个属性之后退出。请帮助我解释为什么它不会继续循环。
答案 0 :(得分:0)
你的for循环无法超越第一个属性,因为当你调用deepEqual时你退出了函数
for (var property in obj1) {
if (property in obj2) {
// returning means no more looping....
return deepEqual(obj1[property], obj2[property])
}
如果deepEqual
返回相等的值,则要继续循环,如果错误则返回。