JavaScript Error Handling – ReferenceError:” x ” nu este definit
următorul pe lista de articole din seria noastră de manipulare a erorilor JavaScript aruncăm o privire mai atentă la eroarea variabilă nedefinită. Eroarea variabilă nedefinită este aruncată atunci când se face o referință la o variabilă sau obiect în cod care fie nu există, fie se află în afara domeniului de aplicare al codului de executare.
mai jos vom arunca o privire la câteva exemple specifice care vor produce în mod obișnuit o eroare variabilă nedefinită, precum și cum să prindem și să rezolvăm această eroare atunci când apare. Să începem!
Rundown tehnic
- toate obiectele de eroare JavaScript sunt descendenți ai obiectului de eroare, sau un obiect moștenit în acesta.
- obiectul ReferenceError este moștenit de la obiectul de eroare.
- eroarea variabilă nedefinită este un tip specific de obiect ReferenceError.
când ar trebui să-l utilizați?
când adânc în procesul de codificare cu JavaScript, nu este tot ceea ce nemaiauzit pentru a face o greșeală de scriere sau pur și simplu uitați să inițializeze o variabilă sau obiect înainte de a apela a spus variabilă mai târziu în jos linia. Când se întâmplă acest lucru, JavaScript își va arăta nemulțumirea aruncând o eroare variabilă nedefinită, indicând faptul că obiectul de referință nu a fost definit anterior.
de exemplu, aici facem o declarație simplă de a încerca să apuca .proprietatea de lungime a elementului nostru nedefinitvariabile. Suntem, de asemenea, folosind un simplu bloc try-catch și hapsân orice ReferenceErrors care ar putea apărea, apoi trece-le de-a lungul la o funcție simplă printError pentru a înfrumuseța ieșirea mesajelor noastre de eroare:
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); }}
destul de sigur, cum era de așteptat, JavaScript observă că variabila element este nedefinit, și produce eroarea explicită variabilă nedefinit:
// FIREFOX ReferenceError: item is not defined// CHROME ReferenceError: item is not defined
merită menționat faptul că, spre deosebire de multe alte erori JavaScript pe care le-am acoperit în această serie, textul mesajului de eroare variabil nedefinit nu diferă între cele două motoare care alimentează Firefox sau Chrome.
remedierea evidentă și simplă a acestei erori variabile nedefinite este de a declara pur și simplu variabila noastră de articol înainte de a o numi:
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); }}
acum trecem de element.lungime apel fără a arunca orice erori și, astfel, produce consola noastră.ieșire jurnal de lungimea șirului nostru element:
Length is 3.
Din punct de vedere tehnic, în timp ce eroarea variabilă nedefinită este destinată identificării referințelor la variabile nedefinite, ea joacă, de asemenea, un rol atunci când încearcă să facă referire la variabilele definite, dar sunt în afara contextului actual de aplicare în care codul este executat.
de exemplu, aici avem o funcție getFullName simplă, care definește două variabile în sine, firstName și lastName. În afara domeniului de aplicare al acestei funcții, încercăm să obținem proprietatea lungime a variabilei firstName:
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); }}
în timp ce variabila firstName este deja definită din punct de vedere tehnic, este inaccesibilă pentru noi la acest nivel de execuție și astfel este aruncată o eroare variabilă nedefinită:
ReferenceError: firstName is not defined
în acest caz, rezoluția este o chestiune de tragere a variabilei firstName și lastName în afara domeniului de aplicare al contextul execuției ca blocul nostru try-catch:
// 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); }}
așa cum era de așteptat, nu se produc erori și obținem lungimea variabilei firstname ca ieșire:
Length is 3.
pentru a vă scufunda și mai adânc în înțelegerea modului în care aplicațiile dvs. se ocupă de Erorile JavaScript, consultați instrumentul revoluționar de urmărire a erorilor JavaScript Airbrake pentru alerte în timp real și informații instantanee despre ceea ce a mers prost cu codul dvs. JavaScript.