Råd for feilsøking i kode med eksempler på løkker i JavaScript
Nå skal jeg lære deg en metode for å søke etter feil i kode. La oss tenke oss at du av en eller annen misforståelse ikke fulgte rådene fra forrige leksjon og endte opp med kode som ikke fungerer. La oss se på hvordan du finner feilene og får den til å fungere.
Mange nybegynnere bruker en feil metode for å søke. De tar og ser på koden, i håp om at de vil legge merke til feilen. Og sitter slik i noen timer. Det fungerer ikke slik.
Den riktige metoden er å logge variabler til konsollen og finne ut om det som ligger der er det som skal være der, eller ikke. I tillegg bør man starte fra det antatte stedet for problemet og bevege seg oppover i koden. La oss se på det i praksis.
La oss for eksempel anta at du hadde oppgaven med å gå gjennom en array med tosifrede tall og finne tallene der det første sifferet er én mer enn det andre. La oss for enkelhets skyld anta at arrayen lagrer tallene som strenger.
La oss si du løste oppgaven og fikk følgende kode:
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); // gir 0
Koden gir imidlertid 0. I dette
tilfellet er det første man må sjekke
å se om kodeutførelsen
kommer inn i if-setningen.
La oss logge noe til konsollen inne i den:
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('!'); // skriver ikke ut noe
sum += elem;
}
}
console.log(sum);
Siden ingenting dukket opp i konsollen, betyr det at kodeutførelsen rett og slett ikke kommer inn i betingelsen. La oss se med våre egne øyne hva det er vi sammenligner:
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' og '11', '3' og '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
Som et resultat blir det umiddelbart synlig at det andre leddet er tosifret. Det er lett å forstå at dette skyldes at enheten legges til som en streng. La oss rette opp problemet:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // retter opp
sum += elem;
}
}
console.log(sum); // '021324354'
Etter rettingen ser vi allerede at
det har dukket opp noe i variabelen sum,
selv om det er feil. Det er imidlertid tydelig
at det som ligger der er det vi trenger,
men det ble lagt sammen som strenger,
ikke tall. La oss rette opp problemet:
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; // retter opp
}
}
console.log(sum); // alt fungerer
Rett feilene som er gjort i følgende kode:
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);