
Dažreiz JavaScript koda rakstīŔana var bÅ«t sarežģīta, un dažiem izstrÄdÄtÄjiem tÄ pat var radÄ«t bailes. Darba procesÄ neizbÄgami rodas kļūdas, un dažas no tÄm atkÄrtojas diezgan bieži. Å ajÄ rakstÄ, kas paredzÄts iesÄcÄjiem izstrÄdÄtÄjiem, tiek apskatÄ«tas Ŕīs kļūdas un to novÄrÅ”anas veidi. PiemÄri funkciju, Ä«paŔību un objektu nosaukumi Åemti no . Tas viss palÄ«dz Ätri atcerÄties, kÄ labot izplatÄ«tas kļūdas.
AtgÄdinÄm: visiem Ā«HabrĀ» lasÄ«tÄjiem ā atlaide 10 000 rubļu reÄ£istrÄjoties jebkurÄ Skillbox kursÄ ar promo kodu Ā«HabrĀ».
Skillbox iesaka: Praktiskais kurss .
TypeError: Ä«paŔība nav definÄta
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)IepriekÅ” norÄdÄ«tais koda piemÄrs atgriež kļūdu Uncaught TypeError: Cannot read property āluckyā of undefined. ProblÄma ir tÄda, ka objektam girl nav Ä«paŔības named, lai gan ir Ä«paŔība name. TÄ kÄ Ä«paŔība girl.named nav definÄta, pie tÄs nevar piekļūt, jo formÄli tÄ nepastÄv. TomÄr, ja aizstÄt girl.named.lucky ar girl.name, viss darbosies un programma atgriezÄ«s Lucky.
VairÄk par Ä«paŔībÄm var .
TypeError kļūdu novÄrÅ”anas veidi
TypeError kļūdas rodas, kad programmÄtÄjs mÄÄ£ina veikt darbÄ«bas ar datiem, kas neatbilst noteiktam tipam. PiemÄram, var pieminÄt .bold() izmantoÅ”anu, pieprasot undefined Ä«paŔību vai izsaucot funkciju, kas faktiski nav funkcija.
TÄdÄjÄdi, ja mÄÄ£inÄt izsaukt girl(), parÄdÄ«sies kļūda Uncaught TypeError: yourVariable.bold is not a function un girl is not a function, jo faktiski tiek izsaukts objekts, nevis funkcija.
Lai novÄrstu kļūdas, ir jÄizpÄta mainÄ«gie. TÄdÄjÄdi, kas ir girl? Un kas ir girl.named? To var noskaidrot, ja analizÄjam kodu, izmantojam console.log, ievieÅ”am debugger komandu vai izsaucam mainÄ«gÄ nosaukumu konsolÄ. JÄnodroÅ”ina, ka ir iespÄjams strÄdÄt ar datu tipu, kas satur mainÄ«gais. Ja tas nepiemÄrots, mainiet to, piemÄram, pievienojot nosacÄ«jumu vai try..catch bloku ā un iegÅ«stiet kontroli pÄr operÄcijas izpildi.
Steka pÄrpildÄ«jums
Ja ticÄt dziesmas Baby One More Time autoriem (tas ir Britney Spears, jÄ), tad vÄrds hit Å”ajÄ kontekstÄ nozÄ«mÄ dziedÄtÄjas vÄlmi, lai viÅai piezvana vÄlreiz (Å”eit ir paÅ”a dziesmas konteksta skaidrojums ā tulkotÄja piezÄ«me). Pavisam iespÄjams, ka Ŕī vÄlme radÄ«s zvanu pieaugumu reÄlajÄ dzÄ«vÄ. Bet programmÄÅ”anÄ tas ir rekursija, kas var izraisÄ«t kļūdu, ja aicinÄjumu steks ir pÄrpildÄ«ts.
Kļūdas izskatÄs Å”Ädi:
Error: Out of stack space (Edge)
InternalError: too much recursion (Firefox)
RangeError: Maximum call stack size exceeded (Chrome)
Steka pÄrplÅ«de notiek, ja izstrÄdÄtÄjs nav ÅÄmis vÄrÄ pamata gadÄ«jumu rekursijÄ, vai ja kods nepievÄrÅ”as paredzÄtajam gadÄ«jumam.
function oneMoreTime(stillBelieve=true, loneliness=0) {
if (!stillBelieve && loneliness < 0) return
loneliness++
return oneMoreTime(stillBelieve, loneliness)
}Å ajÄ gadÄ«jumÄ stillBelieve nekad nevar pieÅemt vÄrtÄ«bu false, tÄpÄc katru reizi notiks oneMoreTime izsaukums, bet funkcijas izpilde tÄ arÄ« nebeigsies.
Ja sÄksim cerÄt uz diviem draugiem, tas samazinÄs loneliness (vienatni), un zvanu varbÅ«t nemaz nevajadzÄs gaidÄ«t.
function oneMoreTime(stillBelieve=true, loneliness=0) {
if (!stillBelieve && loneliness < 0) return
loneliness--
stillBelieve = false
return oneMoreTime(stillBelieve, loneliness)
}Par piemÄru var minÄt bezgalÄ«gos ciklus, kad sistÄma neizdod kļūdas ziÅojumu, bet lapa, kurÄ tiek izpildÄ«ts JavaScript kods, vienkÄrÅ”i sasalst. Tas notiek, ja while ciklam nav pabeigÅ”anas nosacÄ«juma.
let worldEnded = false
while (worldEnded !== true) {
console.log("Keep on dancin' till the world ends")
}ProblÄmu var atrisinÄt Å”ÄdÄ veidÄ:
let worldEnded = false
while (worldEnded !== true) {
console.log("Keep on dancin' till the world ends")
worldEnded = true
}Bezgala ciklu un rekursiju atkļūdoŔana
Ja rodas problÄma ar bezgalÄ«gu ciklu, Chrome vai Edge jÄaizver cilne, bet Firefox ā pÄrlÅ«kprogrammas logs. PÄc tam rÅ«pÄ«gi jÄpÄrbauda kode. Ja problÄmu neizdodas atrast, vÄrts pievienot debugger komandu ciklam vai funkcijai un pÄrbaudÄ«t mainÄ«go vÄrtÄ«bas. Ja rezultÄts neatbilst gaidÄ«tajam, to var viegli aizstÄt.
PiemÄrÄ, kas minÄts iepriekÅ”, debugger jÄievieto funkcijas vai cilpas pirmajÄ rindÄ. PÄc tam jÄatver debaga cilne Chrome, lai analizÄtu mainÄ«gÄs scope. Ar next pogu var izsekot to izmaiÅÄm katrÄ iterÄcijÄ. To visu izdarÄ«t ir vienkÄrÅ”i, un lielÄkajÄ daÄ¼Ä gadÄ«jumu problÄma ir atrodama.
SÄ«kÄk par to visu var lasÄ«t Å”eit () un Å”eit ().
Sintakses kļūda
Viens no visbiežÄkajÄm kļūdÄm JavaScript ir SyntaxError. To novÄrst palÄ«dzÄs teksta redaktora paplaÅ”inÄjumi. TÄtad, Bracket Pair Colorizer iezÄ«mÄ iekavas kodÄ ar dažÄdÄm krÄsÄm, bet Prettier vai lÄ«dzÄ«gs analÄ«zes rÄ«ks ļauj Ätri atrast kļūdas. LabÄkais variants, lai samazinÄtu SyntaxError iespÄjamÄ«bu, ir minimÄla iedziļinÄÅ”anÄs.
Dalieties komentÄros: ko jÅ«s darÄt, lai nepieļautu kļūdas vai Ätri tÄs atklÄtu un novÄrstu?
Skillbox iesaka:
- Divu gadu praktiskais kurss .
- TieŔsaistes kurss .
- Praktiskais gada kurss .
Avots: habr.com
