⊗jsPmLpDbg 167 of 505 menu

Съвети за дебъгване на код с примери за цикли в 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);
Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне