Сейчас я научу вас методике поиска ошибок в коде. Представим себе, что вы по какому-то недоразумению не следовали советам из предыдущего урока и получили не работающий код. Давайте посмотрим, как найти ошибки и заставить его работать.
Многие начинающие пользуются неправильной методикой поиска. Они берут и смотрят на код, в надежде, что заметят ошибку. И так пару часов. Это так не работает.
Правильной методикой является вывод переменных в консоль и определения, то ли там лежит, что нужно, или нет. При этом начинать нужно от предполагаемого места проблемы и двигаться вверх по коду. Давайте посмотрим на практике.
Пусть для примера перед вами стояла задача перебрать массив с двухзначными числами и найти числа, у которых первая цифра на один больше второй. Пусть для простоты в массиве хранятся числа в виде строк.
Пусть вы решили задачу и получили следующий код:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum); // выдает 0
Код, однако, выдает 0
. В этом
случае первым делом нужно проверить,смотрим что в переменной
попадает ли выполнения кода в иф.
Выведим в нем что-нибудь в консоль:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (elem[0] === elem[1] + 1) {
console.log('!'); // ничего не выводит
sum += elem;
}
}
console.log(sum);
Так как в консоли ничего не появилось, это значит, что выполнения кода просто не заходит в условие. Посмотрим своими глазами, что же мы сравниваем:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
console.log(elem[0], elem[1] + 1); // '2' и '11', '3' и '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
В результате сразу становится видным, что второе слагаемое двухзначное. Легко понять, что это из-за того, что единица прибавляется как строка. Исправим проблему:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // исправляем
sum += elem;
}
}
console.log(sum); // '021324354'
После исправления мы уже видим, что
в переменной sum
что-то появилось,
хотя и некорректное. Видно, однако,
что там лежит то, что нам нужно,
но оно сложилось в виде строк,
а не чисел. Исправим проблему:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) {
sum += +elem; // исправляем
}
}
console.log(sum); // все работает
Исправьте ошибки, допущенные в следующем коде:
let obj = {a: 10, b: 20, c: 30, d: 40, e: 50};
let sum = 0;
for (let elem in obj) {
if (elem[0] === '1' && elem[0] === '2') {
sum += +elem;
}
}
console.log(sum);