
Ibland kan det vara svÄrt att skriva JavaScript-kod, och ibland kan det till och med vara skrÀmmande, vilket mÄnga utvecklare kÀnner igen. Under arbetets gÄng uppstÄr oundvikligen fel, och vissa av dem Äterkommer ofta. I denna artikel, som riktar sig till nybörjare, beskrivs dessa fel och hur man löser dem. För att göra det tydligare har funktionsnamn, egenskaper och objekt hÀmtats frÄn . Allt detta hjÀlper till att snabbt komma ihÄg hur man rÀttar till vanliga fel.
PĂ„minnelse: för alla lĂ€sare av "Habr" â 10 000 rubel rabatt vid registrering för vilken kurs som helst pĂ„ Skillbox med rabattkoden "Habr".
Skillbox rekommenderar: Praktisk kurs .
TypeError: egenskap Àr inte definierad
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)Exemplet ovan ger felet Uncaught TypeError: Cannot read property âluckyâ of undefined. Problemet Ă€r att objektet girl inte har egenskapen named, Ă€ven om det har egenskapen name. Eftersom egenskapen girl.named inte Ă€r definierad kan den inte heller nĂ„s, eftersom den formellt inte existerar. Men om man byter girl.named.lucky till girl.name fungerar allt och programmet kommer att returnera Lucky.
För mer information om egenskaper kan man .
Metoder för att ÄtgÀrda TypeError-fel
TypeError-fel uppstÄr nÀr en programmerare försöker utföra ÄtgÀrder med data som inte motsvarar en viss typ. Ett exempel kan vara att anvÀnda .bold(), begÀra en egenskap som Àr undefined eller att kalla en funktion som inte faktiskt Àr en funktion.
Om man försöker kalla girl (), kommer det att uppstÄ felet Uncaught TypeError: yourVariable.bold is not a function och girl is not a function, eftersom det verkligen Àr ett objekt som anropas, inte en funktion.
För att Ă„tgĂ€rda fel mĂ„ste man studera variablerna. SĂ„ vad Ă€r girl? Och vad Ă€r girl.named? Detta kan man ta reda pĂ„ genom att analysera koden, skriva ut variabler med hjĂ€lp av console.log med kommandot debugger eller anropa variabelns namn i konsolen. Man behöver sĂ€kerstĂ€lla att man kan arbeta med datatypen som finns i variabeln. Om den inte passar, Ă€ndra den, till exempel genom att lĂ€gga till ett villkor eller en try..catch-block â och fĂ„ kontroll över operationens utförande.
Stack overflow
Om man ska tro pĂ„ artisterna bakom lĂ„ten Baby One More Time (det Ă€r Britney Spears, ja), sĂ„ betyder ordet hit i detta sammanhang ett önskemĂ„l frĂ„n sĂ„ngerskan att bli uppringd igen (hĂ€r Ă€r en förklaring av sjĂ€lva lĂ„tens kontext, â anm. översĂ€ttaren). Det kan mycket vĂ€l hĂ€nda att detta önskemĂ„l leder till en ökning av samtalen i verkliga livet. Men inom programmering Ă€r det rekursion, vilket kan orsaka ett fel vid stacköverflöd.
Fel ser ut pÄ följande sÀtt:
Error: Out of stack space (Edge)
InternalError: too much recursion (Firefox)
RangeError: Maximum call stack size exceeded (Chrome)
Stacköverflödet sker om utvecklaren inte har beaktat basfallet i rekursionen eller om koden inte hanterar det förutsebara fallet.
function oneMoreTime(stillBelieve=true, loneliness=0) {
if (!stillBelieve && loneliness < 0) return
loneliness++
return oneMoreTime(stillBelieve, loneliness)
}I detta fall kan stillBelieve aldrig fÄ vÀrdet false, sÄ varje gÄng kommer oneMoreTime att anropas, men funktionen kommer aldrig att avslutas.
Om man istÀllet börjar hoppas pÄ tvÄ vÀnner, minskar det loneliness (ensamhet), och samtalet kan vÀnta.
function oneMoreTime(stillBelieve=true, loneliness=0) {
if (!stillBelieve && loneliness < 0) return
loneliness--
stillBelieve = false
return oneMoreTime(stillBelieve, loneliness)
}Ett exempel kan vara fall med oÀndliga loopar, dÀr systemet inte ger nÄgot felmeddelande, utan sidan som kör JavaScript-koden helt enkelt fryser. Detta hÀnder om while-loopen saknar ett avslutningsvillkor.
let worldEnded = false
while (worldEnded !== true) {
console.log("Keep on dancin' till the world ends")
}Problemet kan lösas pÄ följande sÀtt:
let worldEnded = false
while (worldEnded !== true) {
console.log("Keep on dancin' till the world ends")
worldEnded = true
}Debugga oÀndliga loopar och rekursioner
Om det uppstĂ„r ett problem med en oĂ€ndlig loop, behöver du stĂ€nga fliken i Chrome eller Edge, och i Firefox â fönstret i webblĂ€saren. Efter det mĂ„ste du noggrant analysera koden. Om problemet inte kan hittas, bör du lĂ€gga till debug-server i loopen eller funktionen och kontrollera variablernas vĂ€rde. Om resultatet inte motsvarar det förvĂ€ntade, ersĂ€tter vi det, och detta kan göras enkelt.
I exemplet ovan bör debuggern lÀggas till som den första raden i en funktion eller loop. DÀrefter mÄste du öppna debug-fliken i Chrome och analysera variablerna i omfattningen. Med knappen next kan du spÄra deras förÀndring vid varje iteration. Att göra detta Àr enkelt, och i de flesta fall finns problemet.
Mer om detta kan lÀsas hÀr () och hÀr ().
Syntaxfel
Ett av de vanligaste felen i JavaScript Àr SyntaxError. Att undvika dem kan underlÀttas genom tillÀgg för textredigeraren. Till exempel markerar Bracket Pair Colorizer klamrar i koden med olika fÀrger, och Prettier eller ett liknande analysverktyg ger möjlighet att snabbt hitta fel. Det bÀsta sÀttet att minska risken för SyntaxError Àr att ha minimal inbÀddning.
Dela gÀrna i kommentarerna: Vad gör ni för att undvika fel eller snabbt upptÀcka och ÄtgÀrda dem?
Skillbox rekommenderar:
- TvÄÄrig praktisk kurs .
- Onlinekurs .
- Praktisk Ärskurs .
KĂ€lla: habr.com
