Error (throw new Error) în JavaScript

Erori Toate browserele (cause: ES2022)

Creează un obiect de eroare cu mesaj, tip și stivă de apeluri, pe care îl arunci cu throw.

Sintaxă
throw new Error(mesaj, { cause })
new TypeError(mesaj)
eroare.toString()

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 și e.message devine undefined. Aruncă mereu un obiect Error.
  • 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.