Erori în javascript și cum să le rezolvați


Înainte de lista în sine, să examinăm rapid structura mesajului de eroare. Înțelegerea structurii vă ajută să înțelegeți erorile și veți avea mai puține probleme dacă întâlniți erori care nu sunt listate în această listă.







O eroare tipică din Chrome arată astfel:

Acum, la greșelile.

Uncaught TypeError: undefined nu este o funcție


Erori asociate: numărul nu este o funcție, șirul nu este o funcție, Eroare nefolosită: "foo" nu este o funcție, funcția este așteptată

Apare atunci când se face o încercare de a apela o valoare ca o funcție atunci când valoarea nu este o funcție. De exemplu:


Această eroare apare de obicei dacă încercați să apelați o funcție pentru un obiect, dar sunt sigilate în nume.


Proprietățile inexistente ale obiectului implicit la nedefinit. ceea ce duce la această eroare.

Alte variante, cum ar fi "numărul nu este o funcție", apar atunci când încercați să apelați un număr, ca și cum ar fi o funcție.

Cum se remediază eroarea: asigurați-vă că numele funcției este corect. Pentru această eroare, numărul liniei indică de obicei locul potrivit.

Uncaught ReferenceError: Partea stângă nevalidă în alocare


Erori asemănătoare: Excepție nesupusă: ReferenceError: Nu se poate atribui funcției "functionCall ()", excepție Uncaught: ReferenceError: Nu se poate atribui "

Aceasta este cauzată de o încercare de a atribui o valoare aceluia care nu poate fi atribuită o valoare.

Cel mai frecvent exemplu de eroare este condiția în cazul în care:


În acest exemplu, programatorul a folosit accidental un semn egal în loc de două. Expresia „din partea stângă, în misiune“ se referă la partea stângă a semnului egal, și, după cum se poate observa în acest exemplu, partea stângă conține ceva care nu poate fi atribuit ca o eroare.

Cum să remediați eroarea: asigurați-vă că nu încercați să atribuiți o valoare unui rezultat al funcției sau acelui cuvânt cheie.

Uncaught TypeError: Transformarea structurii circulare în JSON


Eroare Related: excepție negestionat: TypeError: JSON.stringify: Nu este un obiect aciclic, TypeError: valoarea obiectului ciclic, de referință circulară în argumentul valoare nu este acceptată

Este întotdeauna cauzată de o referință circulară în obiect, care este apoi trecută la JSON.stringify.


Deoarece a și b din exemplul de mai sus au referințe unele la altele, obiectul rezultat nu poate fi exprimat în JSON.

Cum se remediază eroarea: eliminați referințele circulare, ca în exemplul de mai sus, din toate obiectele pe care doriți să le convertiți în JSON.

Simbol neașteptat;


Erori asociate: așteptate), lipsă) după lista de argumente

Simbolul în această eroare poate fi diferit - poate fi scris "jeton neașteptat", "așteptat

Cum se remediază eroarea: uneori numărul liniei nu indică locația corectă, ceea ce face dificilă repararea erorii.

Eroare cu [] <> () este de obicei cauzată de o pereche de neconcordanțe. Verificați dacă toate parantezele dvs. au o pereche de închidere. În acest caz, numărul liniei indică, de obicei, altceva, nu simbolul problemă.

Neașteptat / este asociat cu expresii regulate. Numarul de linie pentru acest caz este de obicei corect.

neașteptată; cauzate de obicei de un simbol; în interiorul obiectului literal sau al matricei, sau o listă de argumente de apel pentru funcții. De asemenea, numărul liniei va fi, de asemenea, corect pentru acest caz.







Untaught SyntaxError: Simbol neașteptat ILLEGAL


Eroare similară: Litere neterminate cu șir, Terminator de linie nevalidă

În literalul șir, cota de închidere este omisă.

Cum să remediați eroarea: asigurați-vă că toate rândurile au ghilimele de închidere corecte.

Uncaught TypeError: Nu se poate citi proprietatea 'foo' de null, Uncaught TypeError: Nu se poate citi proprietatea 'foo' de undefined


Bugs asemănătoare: TypeError: someVal is null, Imposibil de obținut proprietatea 'foo' de referință undefined sau null

O încercare de a citi nul sau nedefinit ca și cum ar fi un obiect. De exemplu:


Cum se remediază eroarea: cauzată, de obicei, de scrierea greșită. Verificați dacă toate variabilele folosite lângă linia care indică eroarea sunt corect numite.

Uncaught TypeError: Nu se poate seta proprietatea 'foo' de null, Uncaught TypeError: Nu se poate seta proprietatea 'foo' de undefined


Erori asemănătoare: TypeError: someVal este nedefinit, Imposibil de setat proprietatea 'foo' de referință undefined sau null

Încercați să scrieți nul sau nedefinit ca și cum ar fi un obiect. De exemplu:


Cum se remediază eroarea: de obicei, acest lucru este cauzat de erori. Verificați numele variabilelor de lângă linia care indică eroarea.

RangeError fără acoperire: dimensiunea maximă a stivei de apel depășită


Erori corelate: Excepție nesupravegheată: RangeError: Adâncimea maximă de recursiune depășită, recursiunea prea mare, Overflow de stivă

Aceasta este cauzată, de obicei, de o logică incorectă a programului, ceea ce duce la un apel infinit al funcției recursive.

Cum să remediați eroarea: verificați funcțiile recursive pentru erorile care le pot forța să facă apeluri recursive pentru totdeauna.

URIError neafectat: URI malformat


Erori asociate: URIError: secvența URI malformată

Cauzate de un apel incorect pentru a decodeURIComponent.

Cum să remediați eroarea: asigurați-vă că apelurile decodare din componentă pe linia de eroare obțin o intrare corectă.

XMLHttpRequest nu poate încărca unele / url. Nu este prezentă antetul "Access-Control-Allow-Origin" pe resursa solicitată


Erori asociate: cererea de origine încrucișată blocată: aceeași

Această problemă este întotdeauna legată de utilizarea XMLHttpRequest.

Modul de remediere a erorii: asigurați-vă că adresa corectă este corectă și că aceasta respectă politica de același tip. O bună modalitate de a găsi codul de problemă este să consultați adresa URL din mesajul de eroare și să o găsiți în codul dvs.

InvalidStateError: A fost făcută o încercare de a utiliza un obiect care nu este sau nu mai poate fi folosit


Erori corelate: InvalidStateError, cod DOMException 11

Aceasta înseamnă că codul numit o funcție care nu a putut fi apelată în starea actuală. Acesta este, de obicei, asociat cu XMLHttpRequest atunci când încearcă să apeleze funcții pe el până când este gata.


În acest caz, veți primi o eroare deoarece funcția setRequestHeader poate fi apelată numai după apelarea xhr.open.

Cum de a corecta eroarea: o privire la codul într-un rând, indicând o eroare, și asigurați-vă că acesta este chemat la momentul potrivit, sau adaugă apelurile necesare acestui (ca în cazul xhr.open).

concluzie

P.S. Această traducere poate fi îmbunătățită prin trimiterea unui PR aici.

Bine, bine, o să dezvolt ideea pentru cei care nu înțeleg. Când utilizați jQuery, tipul de eroare «tip negestionat: nedefinit nu este o funcție», care a avut loc în adâncul funcției, de exemplu, faceți clic pe handler la / butonul link-ul / etc va arăta oriunde, dar nu pe funcția. În principiu, nici măcar aproape. Puteți să ghiciți numai ultima oară când ai schimbat acolo și apoi poate. undeva, există ceva care nu este luată în considerare sau nu există o virgulă (care JavaScript în general, este de asemenea setat și un mesaj de eroare va conduce, de asemenea, de oriunde, cu excepția funcției cu o eroare)

gygy, jquery, în principiu, atârnă pe elemente DOM'a, și aici totul este simplu și pentru a depana și altele.

plugin-ul meu favorit: jquery (slider-ul de imagine) pe o anumita pagina a site-ului se incadreaza in sine cu un mesaj despre "undefined nu este o functie". Acesta se încadrează numai pe această pagină, în timp ce plugin-ul însuși a fost folosit cu succes de ani de zile și funcționează pe o grămadă de site-uri fără probleme. Motivul? Un alt script a scos o altă versiune a jQuery din exterior și, ca rezultat, avem două versiuni jQuery pe pagină. Iar funcțiile jQuery reușesc să distrugă cumva această situație ...

Prin eroarea indicată, depanarea acestei probleme poate fi foarte, foarte lungă, mai ales dacă nu cunoașteți ultimele modificări ale codului.

Debugarea în consola browser-ului este durere.

Ei bine, crom devtulas, de exemplu, vi se va afișa un stack complet de apeluri și acolo veți găsi numărul liniei din fișierul dvs., cu care a început totul







Articole similare

Trimiteți-le prietenilor: