Oops, l'ho fatto di nuovo: debug degli errori JavaScript più comuni

Oops, l'ho fatto di nuovo: debug degli errori JavaScript più comuni

A volte scrivere codice JavaScript è difficile, a volte addirittura spaventoso, cosa che molti sviluppatori conoscono bene. Nel corso del lavoro, inevitabilmente si verificano errori, alcuni dei quali si ripetono spesso. Questo articolo, pensato per gli sviluppatori alle prime armi, affronta questi errori e come risolverli. Per chiarezza, i nomi di funzioni, proprietà e oggetti sono tratti da canzone popolareTutto ciò ti aiuta a ricordare rapidamente come correggere gli errori più comuni.

Ti ricordiamo: per tutti i lettori di "Habr" - uno sconto di 10 rubli al momento dell'iscrizione a qualsiasi corso Skillbox utilizzando il codice promozionale "Habr".

Skillbox consiglia: Corso pratico "Sviluppatore mobile PRO".

TypeError: la proprietà non è definita

let girl = {
    name: "Lucky",
    location: "Hollywood",
    profession: "star",
    thingsMissingInHerLife: true,
    lovely: true,
    cry: function() {
        return "cry, cry, cries in her lonely heart"
    }
}
console.log(girl.named.lucky)

Il codice di esempio sopra restituisce l'errore Uncaught TypeError: Cannot read property 'lucky' of undefined. Il problema è che l'oggetto girl non ha una proprietà denominata, sebbene abbia una proprietà name. E poiché la proprietà girl.named non è definita, non è possibile accedervi, perché formalmente non esiste. Ma se si sostituisce girl.named.lucky con girl.name, tutto funzionerà e il programma restituirà Lucky.

Maggiori dettagli sulle proprietà possono essere trovati leggi qui.

Modi per risolvere i problemi TypeErrors

Gli errori TypeError si verificano quando un programmatore tenta di eseguire un'azione su dati che non sono di un tipo definito. Alcuni esempi includono l'utilizzo di .bold(), la query di una proprietà non definita o la chiamata di una funzione che in realtà non è una funzione.

Quindi, se provi a chiamare girl(), otterrai l'errore Uncaught TypeError: yourVariable.bold non è una funzione e girl non è una funzione, poiché in realtà viene chiamato un oggetto, non una funzione.

Per risolvere i problemi, è necessario esaminare le variabili. Quindi, cos'è girl? E cos'è girl.named? Puoi scoprirlo analizzando il codice, visualizzando le variabili tramite console.log, il comando debugger o chiamando la variabile name nella console. Devi assicurarti di poter operare sul tipo di dati contenuto nella variabile. Se non è compatibile, modificalo, ad esempio aggiungendo una condizione o un blocco try..catch, e ottieni il controllo sull'esecuzione dell'operazione.

Overflow dello stack

Se crediamo ai testi della canzone "Baby One More Time" (Britney Spears, sì), allora la parola "hit" in questo contesto indica il desiderio della cantante di essere chiamata di nuovo (ecco una spiegazione del contesto della canzone stessa, — ndt). È possibile che questo desiderio porti a un aumento del numero di chiamate nella vita reale. Ma nella programmazione, questa è ricorsione, che può causare un errore in caso di overflow dello stack delle chiamate.

Gli errori si presentano così:

Errore: spazio nello stack insufficiente (Edge)
InternalError: troppa ricorsione (Firefox)
RangeError: dimensione massima dello stack di chiamate superata (Chrome)

Uno stack overflow si verifica quando lo sviluppatore non ha preso in considerazione il caso base nella ricorsione o quando il codice non affronta il caso previsto.

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness++
    return oneMoreTime(stillBelieve, loneliness)
}

In questo caso, stillBelieve non può mai essere valutato come falso, quindi oneMoreTime verrà chiamato ogni volta, ma la funzione non verrà mai completata.

Se inizi a contare su due amici, la solitudine si ridurrà e non dovrai più aspettare una chiamata.

function oneMoreTime(stillBelieve=true, loneliness=0) {
    if (!stillBelieve && loneliness < 0) return
    loneliness--
    stillBelieve = false
    return oneMoreTime(stillBelieve, loneliness)
}

Un esempio potrebbero essere i casi di loop infiniti, in cui il sistema non visualizza alcun messaggio di errore, ma la pagina in cui viene eseguito il codice JavaScript si blocca semplicemente. Questo accade se il ciclo while non ha una condizione di terminazione.

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
}

Il problema può essere risolto come segue:

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Keep on dancin' till the world ends")
  worldEnded = true
}

Debug di cicli infiniti e ricorsioni

Se riscontri un problema con un ciclo infinito, devi chiudere la scheda in Chrome o Edge e la finestra del browser in Firefox. Dopodiché, analizza attentamente il codice. Se non riesci a individuare il problema, dovresti aggiungere il comando del debugger al ciclo o alla funzione e controllare il valore delle variabili. Se il risultato non corrisponde a quello atteso, sostituiscilo; questa operazione può essere eseguita facilmente.

Nell'esempio precedente, debugger dovrebbe essere aggiunto come prima riga della funzione o del ciclo. Quindi è necessario aprire la scheda debug in Chrome, analizzando le variabili nell'ambito. Utilizzando il pulsante successivo, è possibile monitorare le modifiche a ogni iterazione. È tutto facile da fare e, nella maggior parte dei casi, il problema viene individuato.

Puoi leggere di più su tutto questo qui (per cromo) e qui (per Firefox).

Errore di sintassi

Uno degli errori più comuni in JavaScript è SyntaxError. Le estensioni dell'editor di testo possono aiutare a evitarli. Ad esempio, Bracket Pair Colorizer contrassegna le parentesi nel codice con colori diversi, mentre Prettier o uno strumento di analisi simile consente di individuare rapidamente gli errori. L'opzione migliore per ridurre la probabilità di SyntaxError è l'annidamento minimo.

Condividi nei commenti: cosa fai per evitare gli errori o per individuarli ed eliminarli rapidamente?

Skillbox consiglia:

Fonte: habr.com

Acquista hosting affidabile per siti con protezione DDoS, server VPS VDS 🔥 Acquista un hosting web affidabile con protezione DDoS, server VPS e VDS | ProHoster