1
我無法讓我的循環繼續工作後,我的對象的第一個屬性。這是從雄辯的JavaScript在第4章的一個問題:對於循環遞歸函數沒有完成
寫一個函數,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,當它應該說是假的,因爲「這裏的屬性是不相等的。查看輸出時,這是因爲函數中的「for in循環」在第一個屬性之後退出。請幫助我爲什麼它不會繼續循環。
感謝您的評論!你的回答是有道理的,我通過用'if(!deepEqual(obj1 [property],obj2 [property]))來代替返回值來工作「) return false;'。 – runandrew