我自學JavaScript和我卡在從洋洋灑灑的JavaScript以下問題:使用Javascript - deepEqual比較和遞歸
寫一個函數,deepEqual,取兩個值並返回true 僅當它們具有相同的值或具有相同 屬性的對象時,其值與遞歸調用deepEqual的 相比也相等。要找出是否通過 標識(使用===運算符)或通過查看它們的 屬性來比較兩個事物,可以使用typeof運算符。如果它爲兩個值生成「對象」 ,則應該進行深入比較。但是你必須考慮一個愚蠢的例外:由於歷史事故,輸入 null也會產生「對象」。
我的問題: 爲什麼console.log(deepEqual(obj, {here: {is: "an"}, object: 2}))
出來的假時a[key]
爲{ is: 'an' }
和b[key]
爲{ is: 'an' }
,但真正當代碼與!deepEqual(a[key], b[key])
取代?
代碼:
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}));
您錯過了「遞歸調用deepEqual」的部分。答案在問題中。 :)什麼是'obj'? – 2015-04-01 01:04:12
我很困惑爲什麼'(a [key]!== b [key])'和遞歸函數做的不一樣。 (我試圖非遞歸地解決問題。)我編輯了問題以反映obj變量。 – Autumn 2015-04-01 16:25:48