我正在自学JavaScript,并且遇到了Eloquent JavaScript的以下问题:
编写一个函数deepEqual,该函数接受两个值并返回true
仅当它们具有相同的值或具有相同的对象时
与递归比较时其值也相等的属性
调用deepEqual。找出是否比较两件事
身份(为此使用===运算符)或查看其
属性,可以使用typeof运算符。如果产生“物体”
对于这两个值,您应该进行深入比较。但是你必须
考虑到一个愚蠢的例外:由于历史事故,typeof
null也产生“对象”。
我的问题:
为什么当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}));
最佳答案
因为a[key]
和b[key]
都是对象,所以也需要在它们上使用deepEquals
。
当前,您没有递归调用deepEquals
,因此不可能发生。
关于javascript - Javascript-deepEqual比较和递归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29381078/