Error

A fordítás folyamatban van.

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.

EvalError
Egy olyan hibaobjektum példányát hozza létre, ami az eval() globális függvénnyel kapcsolatos.
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.
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.
SyntaxError
Egy olyan hibaobjektum példányát hozza létre, ami egy szintaktikai hibát jelez.
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.
URIError
Egy olyan hibaobjektum példányát hozza létre, ami akkor keletkezik, ha az encodeURI(), vagy a decodeURI() függvények érvénytelen bemeneti paramétereket kapnak.
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.: Promise.any().
InternalError
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

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

Példány tagváltozói

Error.prototype.message
Rövid hibaüzenet.
Error.prototype.name
A hiba neve.
Error.prototype.description
Egy nem-standard Microsoft tagváltozó a hiba leírásához. Hasonlít a message-hez.
Error.prototype.number
Egy nem-standard Microsoft tagváltozó a hiba számához.
Error.prototype.fileName
Egy nem-standard Mozilla tagváltozó, ami a hibát okozó fájl útvonalát tartalmazza.
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.
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.
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

Error.prototype.toString()
Egy string-gel tér vissza, ami leírja az objektumot. Ez a függvény felüldefiniálja a 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 throw kulcsszó segítségével. Az ilyen hibákat a 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 constructor tagváltozójával, illetve modern JavaScript motor használata esetén, a 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
ECMAScript (ECMA-262)
The definition of 'Error' in that specification.

Böngészőkompatibilitás

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
ErrorChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 6Opera Full support 4Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100
Error() constructorChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 6Opera Full support 4Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100
columnNumber
Non-standard
Chrome No support NoEdge No support NoFirefox Full support 1IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android Full support 4Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
fileName
Non-standard
Chrome No support NoEdge No support NoFirefox Full support 1IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android Full support 4Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
lineNumber
Non-standard
Chrome No support NoEdge No support NoFirefox Full support 1IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android Full support 4Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
messageChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 6Opera Full support 5Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100
nameChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 6Opera Full support 4Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100
stack
Non-standard
Chrome Full support 3Edge Full support 12Firefox Full support 1IE Full support 10Opera Full support 10.5Safari Full support 6WebView Android Full support ≤37Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 11Safari iOS Full support 6Samsung Internet Android Full support 1.0nodejs Full support 0.1.100
toSource
Non-standard
Chrome No support NoEdge No support NoFirefox No support 1 — 74
Notes
No support 1 — 74
Notes
Notes Starting in Firefox 74, toSource() is no longer available for use by web content. It is still allowed for internal and privileged code.
IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android Full support 4Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
toStringChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 6Opera Full support 4Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100

Legend

Full support  
Full support
No support  
No support
Non-standard. Expect poor cross-browser support.
Non-standard. Expect poor cross-browser support.
See implementation notes.
See implementation notes.

Lásd még