Ce face Error (throw new Error)
new Error(mesaj) creează o eroare cu proprietățile message, name ("Error") și stack (lista apelurilor care au dus la ea). O arunci cu throw și o prinzi cu try / catch.
Există tipuri predefinite pentru situații specifice: TypeError (tip greșit), RangeError (valoare în afara limitelor), SyntaxError, ReferenceError, URIError, EvalError și AggregateError (mai multe erori). Poți crea și tipuri proprii, cu class EroareMea extends Error.
Opțiunea cause păstrează eroarea inițială când arunci una nouă, mai clară. toString() returnează "Nume: mesaj".
Parametri
| Parametru | Descriere |
|---|---|
mesaj |
Opțional. Textul erorii. |
optiuni |
Opțional. { cause: eroareaOriginala }. |
Ce returnează
Un obiect Error.
Exemple
Exemplul 1: Aruncare și prindere
function imparte(a, b) {
if (typeof a !== "number" || typeof b !== "number") throw new TypeError("Sunt necesare numere");
if (b === 0) throw new RangeError("Împărțitorul nu poate fi 0");
return a / b;
}
for (const [a, b] of [[10, 2], [10, 0], ["10", 2]]) {
try {
console.log(imparte(a, b));
} catch (e) {
console.log(e.name, "-", e.message, "-", e.toString());
}
}
Rezultat
5
RangeError - Împărțitorul nu poate fi 0 - RangeError: Împărțitorul nu poate fi 0
TypeError - Sunt necesare numere - TypeError: Sunt necesare numere
Exemplul 2: O eroare proprie, cu cauză
class EroareValidare extends Error {
constructor(camp, mesaj, optiuni) {
super(mesaj, optiuni);
this.name = "EroareValidare";
this.camp = camp;
}
}
try {
try {
JSON.parse("{varsta: 30}");
} catch (e) {
throw new EroareValidare("profil", "Profil invalid", { cause: e });
}
} catch (e) {
console.log(e instanceof EroareValidare, e instanceof Error);
console.log(`${e.name} (${e.camp}): ${e.message}`);
console.log("Cauza:", e.cause.name);
}
Rezultat
true true
EroareValidare (profil): Profil invalid
Cauza: SyntaxError
Greșeli frecvente
- Arunci texte:
throw "Eroare!". Pierzi stiva de apeluri șie.messagedevineundefined. Aruncă mereu un obiectError. - Prinzi o eroare și o înlocuiești cu alta fără
cause. Informația despre problema reală se pierde.
Comenzi înrudite
try / catch: Prinde erorile, ca programul să nu se oprească și să poți afișa un mesaj clar.Error.isError: Verifică sigur dacă o valoare este o eroare adevărată, chiar dacă vine din alt context (iframe, worker).Error.captureStackTrace: Adaugă proprietatea stack la un obiect oarecare, opțional ascunzând apelurile interne din ea.