Съвети за дебъгване на код с примери за цикли в JavaScript
Сега ще ви науча на методика за търсене на грешки в кода. Да си представим, че поради някакво неразбиране не сте следвали съветите от предишния урок и сте получили неработещ код. Нека видим как да намерим грешките и да накараме кода да работи.
Много начинаещи използват неправилна методика за търсене. Те взимат и гледат кода, надявайки се, че ще забележат грешката. И така в продължение на няколко часа. Това не работи по този начин.
Правилната методика е извеждането на променливите в конзолата и определяне дали там се намира това, което е нужно, или не. При това трябва да се започне от предполагаемото място на проблема и да се движите нагоре по кода. Нека да видим на практика.
Нека за пример пред вас е стояла задача да преминете през масив с двуцифрени числа и да намерите числа, при които първата цифра е с едно по-голяма от втората. Нека за простота в масива се съхраняват числата под формата на низове.
Нека сте решили задачата и сте получили следния код:
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. В този
случай първо трябва да проверите,
дали изпълнението на кода навлиза в if условието.
Нека изведем нещо в конзолата вътре в него:
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);