--- title: Error slug: Web/JavaScript/Reference/Global_Objects/Error translation_of: Web/JavaScript/Reference/Global_Objects/Error ---
{{JSRef}}

Az Error objektumok futásidejű hiba során keletkeznek. Továbbá ezek az alapjai a saját készítésű hibaobjektumoknak is. Később olvashatsz a beépített hiba típusokról is.

Leírás

A futásidejű hibák során Error objektumok keletkezhetnek, illetve érkezhetnek.

Hiba típusok

A generikus Error konstruktor mellett, A JavaScript-ben más hiba konstruktorok is léteznek. A kliens-oldali kivételek listájához, lásd, a Kivételek kezelése fejezetet.

{{JSxRef("EvalError")}}
Egy olyan hibaobjektum példányát hozza létre, ami az {{JSxRef("eval", "eval()")}} globális függvénnyel kapcsolatos.
{{JSxRef("RangeError")}}
Egy olyan hibaobjektum példányát hozza létre, ami akkor történik, ha valamelyik szám típusú változó az érvényes értékkészleten kívűlre esik.
{{JSxRef("ReferenceError")}}
Egy olyan hibaobjektum példányát hozza létre, ami akkor történik, ha érvénytelen hivatkozásra történik hivatkozás.
{{JSxRef("SyntaxError")}}
Egy olyan hibaobjektum példányát hozza létre, ami egy szintaktikai hibát jelez.
{{JSxRef("TypeError")}}
Egy olyan hibaobjektum példányát hozza létre, ami akkor keletkezik, ha a változó, vagy paraméter típusa nem megfelelő, vagy érvénytelen.
{{JSxRef("URIError")}}
Egy olyan hibaobjektum példányát hozza létre, ami akkor keletkezik, ha az {{JSxRef("encodeURI", "encodeURI()")}}, vagy a {{JSxRef("decodeURI", "decodeURI()")}} függvények érvénytelen bemeneti paramétereket kapnak.
{{JSxRef("AggregateError")}}
Egy olyan hibaobjektum példányát hozza létre, ami egyszerre több hibát foglal magába. Ilyen objektum akkor jön létre, amikor egy függvényben egyidejűleg több hiba is történik. Például.: {{JSxRef("Promise.any()")}}.
{{JSxRef("InternalError")}} {{non-standard_inline}}
Egy olyan hibaobjektum példányát hozza létre, ami akkor jön létre, amikor a JavaScript motorjában belső hiba keletkezik. Pl.: "too much recursion" ("Túl sok rekurzió").

Konstruktor

Error()
Egy új Error objektumot hoz létre.

Statikus függvények

{{JSxRef("Error.captureStackTrace()")}}
Egy nem-standard V8 függvény, ami létrehoz egy {{JSxRef("Error.prototype.stack", "stack")}} tagváltozót az Error példányon.

Példány tagváltozói

{{jsxref("Error.prototype.message")}}
Rövid hibaüzenet.
{{jsxref("Error.prototype.name")}}
A hiba neve.
{{jsxref("Error.prototype.description")}}
Egy nem-standard Microsoft tagváltozó a hiba leírásához. Hasonlít a {{jsxref("Error.prototype.message", "message")}}-hez.
{{jsxref("Error.prototype.number")}}
Egy nem-standard Microsoft tagváltozó a hiba számához.
{{jsxref("Error.prototype.fileName")}}
Egy nem-standard Mozilla tagváltozó, ami a hibát okozó fájl útvonalát tartalmazza.
{{jsxref("Error.prototype.lineNumber")}}
Egy nem-standard Mozilla tagváltozó, ami a hibát okozó fájl azon sorát jelöli, ahonnan a hiba származik.
{{jsxref("Error.prototype.columnNumber")}}
Egy nem-standard Mozilla tagváltozó, ami a hibát tartalmazó sor azon oszlopát (karakterét) jelöli, ahonnan a hiba származik.
{{jsxref("Error.prototype.stack")}}
Egy nem-standard Mozilla tagváltozó ami a stacktrace-t tartalmazza (A hiba nyomonkövetése a veremen).

Példány függvények

{{jsxref("Error.prototype.toString()")}}
Egy string-gel tér vissza, ami leírja az objektumot. Ez a függvény felüldefiniálja a {{jsxref("Object.prototype.toString()")}} fügvényt.

Példák

Generikus hiba keletkezése

Az Error objektumot általában akkor érdemes létrehozni, ha azt utána használjuk, vagy eldobjuk a {{JSxRef("Statements/throw", "throw")}} kulcsszó segítségével. Az ilyen hibákat a {{JSxRef("Statements/try...catch", "try...catch")}} szerkezettel lehet könnyedén kezelni:

try {
  throw new Error('Whoops!')
} catch (e) {
  console.error(e.name + ': ' + e.message)
}

Különleges hibák kezelése

A hiba objektum {{JSxRef("Object.prototype.constructor", "constructor")}} tagváltozójával, illetve modern JavaScript motor használata esetén, a {{JSxRef("Operators/instanceof", "instanceof")}} kulcsszóval lehetséges a hiba objektum konkrét típusát is lekérdezni. Ezzel leszűkíthető a hibakezelés konkrét hibatípusokra:

try {
  foo.bar()
} catch (e) {
  if (e instanceof EvalError) {
    console.error(e.name + ': ' + e.message)
  } else if (e instanceof RangeError) {
    console.error(e.name + ': ' + e.message)
  }
  // ... etc
}

Saját hiba típusok

Elképzelhető, hogy saját hibatípust szereténk készíteni, ami az Error objektumból származik. Ezáltal tudjuk használni a throw new MyError() kifejezést a hiba jelzéséhez, és az instanceof MyError -t a különleges hiba kezeléséhez. Ezzel biztosítható a szebb és konzisztensebb hibakezelés. 

A kérdéskörről olvashatsz bővebben a "What's a good way to extend Error in JavaScript?" című téma alatt a StackOverflow fórumán.

ES6 Saját Error Osztály

7-es, vagy régebbi Babel verziók képesek a CustomError osztályfüggvények kezelésére, de csak akkor, ha azokat at Object.defineProperty()-vel megfelelően deklarálták. Máskülönben, a Babel régebbi verziói és más fordítók nem tudják kezelni az alábbi kódrészletet hozzáadott konfiguráció nélkül.

Egyes böngészőkben előfordul a CustomError konstruktor a stacktrace-ben, ha ES2015-ös osztályokat használunk.

class CustomError extends Error {
  constructor(foo = 'bar', ...params) {
    // Pass remaining arguments (including vendor specific ones) to parent constructor
    super(...params)

    // Maintains proper stack trace for where our error was thrown (only available on V8)
    if (Error.captureStackTrace) {
      Error.captureStackTrace(this, CustomError)
    }

    this.name = 'CustomError'
    // Custom debugging information
    this.foo = foo
    this.date = new Date()
  }
}

try {
  throw new CustomError('baz', 'bazMessage')
} catch(e) {
  console.error(e.name)    //CustomError
  console.error(e.foo)     //baz
  console.error(e.message) //bazMessage
  console.error(e.stack)   //stacktrace
}

ES5 Saját Error Objektumok

Minden böngészőben előfordul a CustomError konstruktor a stacktrace-ben, ha prototípus alapján deklaráljuk azt.

function CustomError(foo, message, fileName, lineNumber) {
  var instance = new Error(message, fileName, lineNumber);
  instance.name = 'CustomError';
  instance.foo = foo;
  Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
  if (Error.captureStackTrace) {
    Error.captureStackTrace(instance, CustomError);
  }
  return instance;
}

CustomError.prototype = Object.create(Error.prototype, {
  constructor: {
    value: Error,
    enumerable: false,
    writable: true,
    configurable: true
  }
});

if (Object.setPrototypeOf){
  Object.setPrototypeOf(CustomError, Error);
} else {
  CustomError.__proto__ = Error;
}

try {
  throw new CustomError('baz', 'bazMessage');
} catch(e){
  console.error(e.name); //CustomError
  console.error(e.foo); //baz
  console.error(e.message); //bazMessage
}

Specifikációk

Specification
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}

Böngészőkompatibilitás

{{Compat("javascript.builtins.Error")}}

Lásd még