我自学JavaScript,而且我从 Eloquent JavaScript 中坚持以下问题:
编写一个函数deepEqual,它接受两个值并返回true 只有它们是相同的值或具有相同的对象 与递归相比,其值也相等的属性 打电话给deepEqual。找出是否比较两件事 身份(使用===运算符)或通过查看他们的身份 属性,您可以使用typeof运算符。如果它产生"对象" 对于这两个值,您应该进行深入比较。但你必须采取 一个愚蠢的例外:由历史事故,typeof null也会生成" object"。
我的问题:
当console.log(deepEqual(obj, {here: {is: "an"}, object: 2}))
为a[key]
且{ is: 'an' }
为b[key]
时,为什么{ is: 'an' }
会显示为false,但如果该代码替换为!deepEqual(a[key], b[key])
,则为true?
代码:
function deepEqual(a, b){
if (a === b) {
return true;
}
else if (typeof a== typeof b && !(a===null ||b===null)){
for(var key in b){
for(key in a){
if(! (key in a)){
return false;
}
else if (a[key] !== b[key]){
return false;
}
else
return true;
}
}
}
else
return false;
}
var obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, {here: {is: "an"}, object: 2}));
答案 0 :(得分:1)
由于a[key]
和b[key]
都是对象,因此您也需要使用deepEquals
。
目前,您并未以递归方式调用deepEquals
,因此无法实现这一目标。