⊗jsPmLpDbg 167 of 505 menu

Nasveti za razhroščevanje kode na primeru zank v JavaScript

Zdaj vas bom naučil metodologije iskanja napak v kodi. Predstavljajmo si, da iz kakšnega nesporazuma niste sledili nasvetom iz prejšnje lekcije in ste dobili nedelujočo kodo. Poglejmo, kako najti napake in jo prisiliti delovati.

Mnogi začetniki uporabljajo napačno metodologijo iskanja. Vzamejo in gledajo kodo, v upanju, da bodo opazili napako. In tako nekaj ur. Tako ne deluje.

Pravilna metodologija je izpisovanje spremenljivk v konzolo in ugotavljanje, ali je tam tisto, kar mora biti, ali ne. Pri tem morate začeti od predvidenega mesta težave in se premikati navzgor po kodi. Poglejmo v praksi.

Vzemimo za primer, da je bila pred vami naloga prebrati matriko z dvomestnimi števili in najti števila, pri katerih je prva številka za ena večja od druge. Za enostavnost naj bodo v matriki shranjena števila v obliki nizov.

Recimo, da ste rešili težavo in dobili naslednjo kodo:

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); // vrne 0

Vendar koda vrne 0. V tem primeru je treba najprej preveriti, ali izvajanje kode sploh pride v if stavek. Izpišimo nekaj v konzolo znotraj njega:

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('!'); // ne izpiše ničesar sum += elem; } } console.log(sum);

Ker se v konzoli ni pojavilo nič, to pomeni, da izvajanje kode preprosto ne pride v pogoj. Poglejmo z lastnimi očmi, kaj primerjamo:

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' in '11', '3' in '21' ... if (elem[0] === elem[1] + 1) { sum += elem; } } console.log(sum);

Kot rezultat takoj postane vidno, da je drugi del dvomesten. Zlahka je razumeti, da je to zaradi tega, ker se enota prišteje kot niz. Popravimo težavo:

let arr = ['21', '32', '34', '43', '45', '54', '55']; let sum = 0; for (let elem of arr) { if (+elem[0] === +elem[1] + 1) { // popravimo sum += elem; } } console.log(sum); // '021324354'

Po popravku že vidimo, da se je v spremenljivki sum nekaj pojavilo, čeprav nekorektno. Vendar je videti, da je tam tisto, kar potrebujemo, vendar se je seštelo v obliki nizov, ne števil. Popravimo težavo:

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; // popravimo } } console.log(sum); // vse deluje

Popravite napake, narejene v naslednji kodi:

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