Oops, e bëra përsëri: zgjidhja e gabimeve të zakonshme në JavaScript

Oops, e bëra përsëri: zgjidhja e gabimeve të zakonshme në JavaScript

Shpesh hera kodimi në JavaScript është e vështirë, ndonjëherë madje frikëson, gjë që i është e njohur shumë zhvilluesve. Gjatë punës, ndodhin gabime të pashmangshme, disa prej të cilave përsëriten shpesh. Artikulli, i orientuar për zhvilluesit e rinj, flet për këto gabime dhe mënyrat për t'iu përgjigjur atyre. Për ilustrim, emrat e funksioneve, vetive dhe objekteve janë marrë nga një këngë popullore. Të gjitha këto ndihmojnë për ta mbajtur mend shpejt se si të rregullohen gabimet e zakonshme.

KujtojmĂ«: pĂ«r tĂ« gjithĂ« lexuesit e «Habra» — zbritje prej 10,000 rublesh pĂ«r regjistrimin nĂ« çdo kurs Skillbox me kodin promovues «Habr».

Skillbox rekomandon: Kurs praktik «Mobil developer PRO».

TypeError: prona e pa përcaktuar

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)

Shembulli i kodit tĂ« mĂ«sipĂ«rm jep gabimin Uncaught TypeError: Cannot read property ‘lucky’ of undefined. Problemi Ă«shtĂ« se objekti girl nuk ka pronĂ«n named, megjithatĂ« ka pronĂ«n name. Dhe pasi prona girl.named nuk Ă«shtĂ« e pĂ«rcaktuar, nuk mund tĂ« qasemi tek ajo, sepse formalisht ajo nuk ekziston. Por, nĂ«se e zĂ«vendĂ«soni girl.named.lucky me girl.name, atĂ«herĂ« gjithçka do tĂ« funksionojĂ« dhe programi do tĂ« kthejĂ« Lucky.

Më shumë rreth pronave mund të lexoni këtu.

Mënyrat për të eliminuar gabimet TypeError

Gabimet TypeError ndodhin kur programuesi përpiqet të kryejë veprime me të dhënat që nuk i përkasin një tipi të caktuar. Si një shembull, mund të merret aplikimi i .bold(), kërkimi i pronës undefined ose thirrja e një funksioni, i cili në të vërtetë nuk është një funksion.

Pra, nëse provoni të thërrisni girl (), do të shfaqet gabimi Uncaught TypeError: yourVariable.bold is not a function dhe girl is not a function, pasi në të vërtetë po thirret objekti, dhe jo funksioni.

PĂ«r tĂ« eliminuar gabimet, duhet tĂ« studiohen variablat. Pra, çfarĂ« Ă«shtĂ« girl? ÇfarĂ« Ă«shtĂ« girl.named? Mund ta mĂ«soni kĂ«tĂ« duke analizuar kodin, duke e nxjerrĂ« variablĂ«n me anĂ« tĂ« console.log, komandĂ«s debugger ose duke thirrur emrin e variablĂ«s nĂ« konsol. Duhet tĂ« siguroheni qĂ« tĂ« keni mundĂ«si tĂ« operoni me tipin e tĂ« dhĂ«nave qĂ« pĂ«rmban variabla. NĂ«se nuk i pĂ«rshtatet, ndryshojeni, pĂ«r shembull, shtoni kushte ose bllok try..catch — dhe merrni kontroll mbi ekzekutimin e operacionit.

Përmbysja e stack-ut

NĂ«se u besojmĂ« autorĂ«ve tĂ« kĂ«ngĂ«s Baby One More Time (po, Ă«shtĂ« Britney Spears), atĂ«herĂ« fjala hit nĂ« kĂ«tĂ« kontekst do tĂ« thotĂ« dĂ«shirĂ«n e kĂ«ngĂ«tares pĂ«r tĂ« marrĂ« njĂ« telefonatĂ« tjetĂ«r (kĂ«tu Ă«shtĂ« njĂ« shpjegim i kontekstit tĂ« kĂ«ngĂ«s, – shĂ«nim i pĂ«rkthyesit). Ka shumĂ« mundĂ«si qĂ« kjo dĂ«shirĂ« tĂ« çojĂ« nĂ« njĂ« rritje tĂ« numrit tĂ« telefonatave nĂ« jetĂ«n reale. Por nĂ« programim, kjo Ă«shtĂ« rekursivitet, njĂ« mĂ«nyrĂ« e cila mund tĂ« shkaktojĂ« njĂ« gabim nĂ« rast se mbushen thikat e thirrjes.

Gabimet duket në vijim:

Gabim: Mungon hapësira e stack-ut (Edge)
GabimBrendshëm: shumë rekursivitet (Firefox)
GabimRang: Sizmi maksimal i thikave të thirrjes është tejkaluar (Chrome)

Tejkaluar thikën e thirrjes ndodh nëse zhvilluesi nuk ka marrë parasysh rastin bazë në rekursivitet, ose nëse kodi nuk i referohet rastit të parashikuar.

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

Në këtë rast, stillBelieve kurrë nuk mund të marrë vlerën false, kështu që çdo herë do të ndodhë thirrja e oneMoreTime, por ekzekutimi i funksionit nuk do të përfundojë kurrë.

Nëse fillon të shpresosh te dy shokë, kjo do të ulë loneliness (vetmia), dhe telefonatën mund të mos e presësh më.

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

Si një shembull mund të përmendim rastet me cikle të pafund, kur sistemi nuk jep një mesazh gabimi, por faqja në të cilën ekzekutohet kodi JavaScript thjesht ngec. Kjo ndodh nëse cikli while nuk ka një kusht për përfundim.

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Continue të vallzojmë derisa bota përfundon")
}

Problemi mund të zgjidhet në këtë mënyrë:

let worldEnded = false
 
while (worldEnded !== true) {
  console.log("Continue të vallzojmë derisa bota përfundon")
  worldEnded = true
}

Debugimi i cikleve të pafund dhe rekursioneve

NĂ«se keni njĂ« problem me njĂ« cikĂ«l tĂ« pafund, nĂ« Chrome ose Edge duhet tĂ« mbyllni skedarin, ndĂ«rsa nĂ« Firefox – dritaren e shfletuesit. Pas kĂ«saj, duhet tĂ« analizoni me kujdes kodin. NĂ«se nuk mund tĂ« gjeni problemin, mund tĂ« shtoni komandĂ«n debugger nĂ« cikĂ«l ose funksion dhe tĂ« kontrolloni vlerat e ndryshoreve. NĂ«se rezultati nuk i pĂ«rket pritshmĂ«rive, atĂ«herĂ« zĂ«vendĂ«sohet, kjo mund tĂ« bĂ«het lehtĂ«sisht.

Në shembullin e dhënë më sipër, debugger duhet të shtohet si rreshti i parë i funksionit ose ciklit. Më pas duhet të hapni skedën e debagimit në Chrome, duke analizuar variablat në scope. Me butonin next mund të ndiheni në ndjekjen e ndryshimeve të tyre në çdo itëracion. Të bësh të gjitha këto është e thjeshtë, dhe në shumicën e rasteve problemi gjendet.

Më shumë rreth të gjitha këtyre mund të lexoni këtu (për Chrome) dhe këtu (për Firefox).

Gabim në sintaksë

Një nga gabimet më të zakonshme në JavaScript është SyntaxError. Të ikni nga ato mund t'ju ndihmojnë zgjerimet e redaktorit të tekstit. Për shembull, Bracket Pair Colorizer shënon kllapat në kod me ngjyra të ndryshme, ndërsa Prettier ose një mjet analize i ngjashëm ofron mundësinë për të gjetur shpejt gabimet. Zgjedhja më e mirë për të reduktuar mundësinë e shfaqjes së SyntaxError është minimizimi i thellësisë së kodit.

Ndani në komentet: çfarë bëni për të mos bërë gabime ose për të zbuluar dhe eliminuar ato shpejt?

Skillbox rekomandon:

Burimi: habr.com

Bleni hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera đŸ”„ Bli hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera | ProHoster