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.