Articles

JavaScript – fejlhåndtering-ReferenceError:” H ” er ikke defineret

næste på listen over artikler i Vores JavaScript-Fejlhåndteringsserie ser vi nærmere på den udefinerede Variable fejl. Den udefinerede Variable fejl kastes, når en henvisning til en variabel eller et objekt er lavet i kode, der enten ikke findes, eller er uden for rammerne af den udførende kode.

nedenfor ser vi på et par specifikke eksempler, der ofte producerer en udefineret variabel fejl, samt hvordan man fanger og håndterer denne fejl, når den vises. Lad os komme i gang!

den tekniske oversigt

  • alle JavaScript-fejlobjekter er efterkommere af Fejlobjektet eller et nedarvet objekt deri.
  • ReferenceError-objektet er arvet fra Fejlobjektet.
  • den udefinerede Variable fejl er en bestemt type Referenceerrorobjekt.

Hvornår skal du bruge det?

når det er dybt i processen med kodning med JavaScript, er det ikke så uhørt at lave en skrivefejl eller bare glemme at initialisere en variabel eller et objekt, før du kalder variablen senere på linjen. Når dette sker, viser JavaScript sin utilfredshed ved at kaste en udefineret variabel fejl, hvilket indikerer, at det refererede objekt ikke tidligere var defineret.

for eksempel gør vi her en simpel erklæring om at forsøge at få fat i .længde ejendom af vores udefinerede varevariabel. Vi bruger også en simpel try-catch-blok og tager fat i eventuelle Referencefejl, der måtte opstå, og sender dem derefter videre til en simpel printError-funktion for at forskønne output fra vores fejlmeddelelser:

var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { // Calling an undefined `item `variable var length = item.length; console.log(`Length is ${length}.`)} catch (e) { if (e instanceof ReferenceError) { printError(e, true); } else { printError(e, false); }}

sikker nok, som forventet, bemærker JavaScript, at varevariablen er udefineret og producerer den eksplicitte udefinerede Variabelfejl:

// FIREFOX ReferenceError: item is not defined// CHROME ReferenceError: item is not defined

det er værd at bemærke, at i modsætning til mange andre JavaScript-fejl, vi har dækket i denne serie, er den udefinerede Variable fejlmeddelelsestekst ikke forskellig mellem de to motorer, der driver Firefoks eller Chrome.

den åbenlyse og enkle løsning på denne særlige udefinerede Variabelfejl er simpelthen at erklære vores varevariabel, før vi kalder den:

var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { // Defining `item` first var item = "Bob"; var length = item.length; console.log(`Length is ${length}.`)} catch (e) { if (e instanceof ReferenceError) { printError(e, true); } else { printError(e, false); }}

nu kommer vi forbi varen.længde opkald uden at smide nogen fejl og dermed producere vores konsol.log output af længden af vores vare streng:

Length is 3.

teknisk set, mens den udefinerede Variabelfejl er beregnet til at identificere referencer til udefinerede variabler, spiller den også en rolle, når man forsøger at henvise til variabler, der er defineret, men er uden for den aktuelle kontekst, hvor koden udføres.

for eksempel har vi her en simpel getFullName-funktion, der definerer to variabler inde i sig selv, fornavn og efternavn. Uden for denne funktions omfang forsøger vi at få længdeegenskaben for fornavnsvariablen:

var getFullName = function() { var firstName = "Bob"; var lastName = "Smith"; return `${firstName} ${lastName}`;}var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { // Accessing `firstName` from outside its scope var length = firstName.length; console.log(`Length is ${length}.`)} catch (e) { if (e instanceof ReferenceError) { printError(e, true); } else { printError(e, false); }}

mens fornavnevariablen allerede er teknisk defineret, er den utilgængelig for os på dette niveau af udførelse, og således kastes en udefineret Variabelfejl:

 ReferenceError: firstName is not defined

i dette tilfælde er opløsning et spørgsmål om at trække fornavnsvariablen uden for omfanget af getfullnamefunktionen, så de er inden for det samme niveau af kontekst for udførelse som vores try-catch-blok:

// 4// Declaring the variables outside our functionvar firstName = "Bob";var lastName = "Smith";var getFullName = function() { return `${firstName} ${lastName}`;}var printError = function(error, explicit) { console.log(` ${error.name}: ${error.message}`);}try { // Accessing `firstName` is now allowed var length = firstName.length; console.log(`Length is ${length}.`)} catch (e) { if (e instanceof ReferenceError) { printError(e, true); } else { printError(e, false); }}

som forventet produceres der ingen fejl, og vi får længden af fornavnsvariablen som output:

Length is 3.

for at dykke endnu dybere ned i forståelsen af, hvordan dine applikationer håndterer JavaScript-Fejl, skal du tjekke det revolutionerende Airbrake JavaScript-fejlsporingsværktøj til alarmer i realtid og øjeblikkelig indsigt i, hvad der gik galt med din JavaScript-kode.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *