Вопрос (Eloquent JS 2nd Ed, Глава 4, упражнение 4):Почему код JavaScript выполняется во время условия false? (Eloquent JavaScript - Deep сравнение)
Написать функцию, deepEqual, которая принимает два значения и возвращает истину только если они имеют одинаковое значение или являются объектами с теми же свойствами , значения которых также равны по сравнению с рекурсивным вызовом deepEqual для .
Test Cases:
var obj = {here: {is: "an"}, object: 2};
var obj1 = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj,obj1));
Код:
var deepEqual = function (x, y) {
if ((typeof x == "object" && x != null) && (typeof y == "object" && y != null)) {
if (Object.keys(x).length != Object.keys(y).length)
return false;
for (var prop in x) {
if (y.hasOwnProperty(prop)){
if (! deepEqual(x[prop], y[prop])) //should not enter!!
return false;
alert('test');
}else return false; // What does this section do?
}
return true;
}
else if (x !== y)
return false;
else
return true;
};
изначально выполняются Paul Roub
Главный вопрос: Я просто добавил предупреждение к блоку кода после if (! deepEqual(x[prop], y[prop]))
заявление вроде отладки, и теперь я понятия не имею, почему код внутри все еще выполняется, а сам оператор должен возвращать true
и !
превращает его false
..?
Что такое }else return false;
? (Это же утверждение) Функция, кажется, работает нормально без этого раздела ..
Именно поэтому вы никогда не должны опускать выражения «{}» in if ... –