Oops, mwen te fè li ankò: Debogaj erè komen nan JavaScript

Oops, mwen te fè li ankò: Debogaj erè komen nan JavaScript

Ekri kòd JavaScript ka difisil epi pafwa kareman entimidasyon, kòm anpil devlopè yo abitye avèk yo. Nan pwosesis travay la, erè inevitableman rive, ak kèk nan yo repete souvan. Atik sa a, ki vize a devlopè inisyasyon, pale sou erè sa yo ak fason yo rezoud yo. Pou klè, yo pran non fonksyon, pwopriyete ak objè yo chante popilè. Tout bagay sa a ede ou byen vit sonje ki jan yo korije erè komen.

Nou raple: pou tout lektè "Habr" - yon rabè nan 10 rubles lè w ap enskri nan nenpòt kou Skillbox lè l sèvi avèk kòd pwomosyon "Habr".

Skillbox rekòmande: Kou pratik "Mobile Developer PRO".

TypeError: pwopriyete pa defini

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)

Egzanp kòd ki pi wo a voye erè a Uncaught TypeError: Pa ka li pwopriyete 'chans' nan endefini. Pwoblèm lan se ke objè ti fi a pa gen yon pwopriyete non, byenke li gen yon pwopriyete non. Epi depi pwopriyete a girl.named pa defini, ou pa ka jwenn aksè nan li, paske fòmèlman li pa egziste. Men, si ou ranplase girl.named.lucky ak girl.name, Lè sa a, tout bagay ap travay ak pwogram nan ap retounen Lucky.

Ou ka aprann plis sou pwopriyete yo li isit la.

Ki jan yo rezoud TypeErrors

TypeErrors rive lè yon pwogramè eseye fè aksyon sou done ki pa matche ak yon kalite espesifik. Egzanp yo enkli itilize .bold(), mande pou yon pwopriyete ki pa defini, oswa rele yon fonksyon ki pa aktyèlman yon fonksyon.

Kidonk, si w eseye rele ti fi (), w ap jwenn erè a Uncaught TypeError: yourVariable.bold se pa yon fonksyon ak ti fi se pa yon fonksyon, paske li se aktyèlman yon objè yo rele, pa yon fonksyon.

Pou elimine erè, ou bezwen etidye varyab yo. Kidonk, kisa yon fi ye? Ki sa ki fi.yo rele? Ou ka jwenn enfòmasyon lè w analize kòd la, montre varyab lè l sèvi avèk console.log, kòmandman debugger la, oswa rele non varyab la nan konsole a. Ou bezwen asire w ke li posib pou opere sou kalite done ki nan varyab la. Si li pa anfòm, chanje li, pou egzanp, ajoute yon kondisyon oswa eseye..trape blòk - ak pran kontwòl sou ekzekisyon an nan operasyon an.

Chemine debòde

Si ou kwè otè yo nan lyrics yo nan chante Baby One More Time (sa a se Britney Spears, wi), Lè sa a, mo hit nan kontèks sa a vle di dezi chantè a pou yo rele ankò (isit la se yon eksplikasyon sou kontèks la menm nan la. chante - nòt tradiktè a). Li ka byen ke dezi sa a pral mennen nan yon ogmantasyon nan kantite apèl nan lavi reyèl. Men, nan pwogramasyon, sa a se yon repetisyon ki ka lakòz yon erè si pil apèl la debòde.

Erè yo sanble sa a:

Erè: soti nan espas chemine (Edge)
InternalError: twòp repetisyon (Firefox)
RangeError: Gwosè maksimòm pil apèl depase (Chrome)

Yon pile debòde rive si pwomotè a pa konsidere ka debaz la nan repetisyon an, oswa si kòd la pa adrese ka a gen entansyon.

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

Nan ka sa a, stillBelieve pa janm ka fo, kidonk younMoreTime yo pral rele chak fwa, men fonksyon an pa janm ap fini.

Si ou kòmanse konte sou de zanmi, sa ap diminye solitid, epi ou pa pral oblije rete tann pou yon apèl.

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

Yon egzanp se ka ki gen bouk enfini, lè sistèm nan pa jenere yon mesaj erè, men paj kote kòd JavaScript egzekite a tou senpleman jele. Sa rive si bouk while la pa gen yon kondisyon revokasyon.

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

Ou ka rezoud pwoblèm nan jan sa a:

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

Debogaj bouk enfini ak recursions

Si ou gen yon pwoblèm bouk enfini, ou bezwen fèmen tab la nan Chrome oswa Edge, epi fèmen fenèt navigatè a nan Firefox. Apre sa, ou bezwen ak anpil atansyon analize kòd la. Si ou pa ka jwenn pwoblèm nan, li vo ajoute yon lòd debugger nan bouk ou oswa fonksyon ou epi tcheke valè varyab yo. Si rezilta a pa koresponn ak sa ki te espere, Lè sa a, nou ranplase li, sa ka fè fasil.

Nan egzanp ki anwo a, debugger ta dwe ajoute kòm premye liy fonksyon an oswa bouk. Lè sa a, ou bezwen louvri tab la debug nan Chrome, analize varyab yo nan sijè ki abòde lan. Sèvi ak bouton kap vini an ou ka swiv chanjman yo nan chak iterasyon. Tout bagay sa a se fasil fè, epi nan pifò ka yo jwenn pwoblèm nan.

Ou ka li plis sou tout bagay sa yo isit la (pou Chrome) ak isit la (pou Firefox).

Erè sentaks

Youn nan erè ki pi komen nan JavaScript se SyntaxError. Ekstansyon editè tèks pral ede w evite yo. Pou egzanp, Bracket Pair Colorizer make parantèz nan kòd la ak koulè diferan, ak Prettier oswa yon zouti analiz menm jan an fè li posib pou jwenn erè byen vit. Opsyon ki pi bon pou diminye chans pou yon SyntaxError se nidifikasyon minim.

Pataje nan kòmantè yo: kisa ou fè pou anpeche erè oswa byen vit detekte epi elimine yo?

Skillbox rekòmande:

Sous: www.habr.com

Add nouvo kòmantè