Articles

JavaScript Error Handling – ReferenceError:” x ” nincs definiálva

következő a JavaScript Error Handling sorozat cikkeinek listáján közelebbről megvizsgáljuk a nem definiált változó hibát. A nem definiált változó hiba akkor jelenik meg, amikor egy változóra vagy objektumra való hivatkozás olyan kódban történik, amely vagy nem létezik, vagy kívül esik a végrehajtó kód hatókörén.

Az alábbiakban néhány konkrét példát tekintünk meg, amelyek általában meghatározatlan változó hibát eredményeznek, valamint azt, hogyan lehet elkapni és kezelni ezt a hibát, amikor megjelenik. Kezdjük!

the Technical Rundown

  • minden JavaScript error object a Error object leszármazottja,vagy egy örökölt objektum.
  • a Refereneerror objektum örökölt a Hibaobjektumból.
  • a nem definiált változó hiba a ReferenceError objektum egy meghatározott típusa.

mikor kell használni?

amikor mélyen a folyamat kódolás JavaScript, ez nem minden, hogy hallatlan, hogy egy elírás, vagy egyszerűen csak felejtsd el, hogy inicializálja a változó vagy objektum hívás előtt az említett változó később le a sort. Amikor ez megtörténik, a JavaScript megmutatja elégedetlenségét egy meghatározatlan változó hiba dobásával, jelezve, hogy a hivatkozott objektumot korábban nem definiálták.

például, itt vagyunk, hogy egy egyszerű nyilatkozatot próbál megragadni a .hossza tulajdonság a meghatározatlan elemváltozható. Mi is használ egy egyszerű try-catch blokk és rángatás bármilyen ReferenceErrors, hogy előfordulhat, majd átadjuk őket egy egyszerű printError funkció szépíteni a kimenet a hibaüzenetek:

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); }}

persze elég, ahogy az várható volt, JavaScript észreveszi, hogy az elem változó nincs meghatározva, és termel a explicit Undefined változó hiba:

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

érdemes megjegyezni, hogy ellentétben sok más JavaScript hibával, amelyeket ebben a sorozatban lefedtünk, a meghatározatlan változó hibaüzenet szövege nem különbözik a Firefox vagy a Chrome tápellátását végző két motor között.

ennek a meghatározatlan változó hibának a nyilvánvaló és egyszerű javítása az, hogy egyszerűen deklaráljuk elemváltozónkat a hívás előtt:

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); }}

most már túljutunk az elemen.hossz hívás dobás nélkül bármilyen hibát, így készítsen a konzol.log kimenet a hossza a tétel karakterlánc:

Length is 3.

technikailag, míg a nem definiált változó hiba a meghatározatlan változókra való hivatkozások azonosítására szolgál, szerepet játszik a definiált változók referenciájának megkísérlésekor is, de kívül esik a kód végrehajtásának jelenlegi hatókörének kontextusán.

például itt van egy egyszerű getFullName függvény, amely két változót határoz meg magában, az első és a vezetéknév. A függvény hatókörén kívül megpróbáljuk megszerezni a firstName változó hossz tulajdonságát:

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); }}

Míg a firstName változó műszakilag meghatározott már, ez elérhetetlen a számunkra, hogy ezen a szinten a végrehajtás, így egy nem Definiált Változó hibát generál:

 ReferenceError: firstName is not defined

ebben Az esetben a felbontás kérdése húzza a firstName, valamint vezetéknév változó hatályán kívül a getFullNamefunction, így ugyanazon összefüggésben a végrehajtás, mint a try-catch blokk:

// 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); }}

Ahogy az várható volt, nem a hibák előállított, mi a hossza a firstName változó, mint a kimeneti:

Length is 3.

merülni még mélyebben megérteni, hogy az alkalmazások foglalkozni JavaScript-Hibák, nézd meg a forradalmi Airbrake JavaScript hiba nyomkövető eszköz valós idejű figyelmeztetések, valamint azonnali betekintést abba, hogy mi volt a baj a JavaScript-kódot.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük