Trwa tłumaczenie tego artykułu.

Kontruktor klasy Error tworzy obiekt błędu. Instancja klasy Error jest rzucana w momencie napotkania błędu w trakcie wykonywania programu. Klasa Error może być także używana do tworzenia własnych wyjątków. Poniżej przestawione zostaną wbudowane standardowe typy błędów.

Składnia

new Error([message[, fileName[, lineNumber]]])

Parametry

message
Opcjonalny. Opis błędu zrozumiały dla użytkownika.
fileName
Opcjonalny. Wartość dla parametru fileName przy tworzeniu obiektu Error. Domyślnie to nazwa pliku zawierającego kod, który wywołał konstruktor.
lineNumber
Opcjonalny. Wartość dla paramteru lineNumber przy tworzeniu obiektu Error. Domyślnie zawiera numer linijki zawirającej wywołanie konstruktora klasy Error.

Opis

Błędy w trakcie wykonywania programu skutkują utworzeniem i rzuceniem nowego obiektu Error.

This page documents the use of the Error object itself and its use as a constructor function. For a list of properties and methods inherited by Error instances, see Error.prototype.

 

Used as a function

Gdy Error jest używany jako funkcja -- bez słowa kluczowego new, zwraca on obiekt Error. Możemy więc zauważyć, że zwykłe wywołanie Error zwróci nam to samo co stworznie nowego obiektu Error przy pomocy słowa kluczowego new.

// to:
const x = Error('Jestem stworzony przy pomocy wyowałania funkcji!');
​​​​// ma te samą funkcję jak to:
const y = new Error('Jestem stworzony przy pomocy słowa kluczowego "new"!');

 

Typy błędów

Oprócz konstruktora generycznego Error, mamy jeszcze siedem innych podstawowych konstruktorów błędów w JavaScript. Dla wyjątów po stronie klienta zobacz Exception Handling Statements.

EvalError
Tworzy instancje reprezentującą błąd dotyczący globalnej funkcji eval().
InternalError
Tworzy instancje reprezentującą błąd, który występuje w momencie wyrzucenia wewnętrznego błędu silnika JavaScript np. "too much recursion".
RangeError
Tworzy instancje reprezentującą błąd, który występuje w momencie gdy zmienna numeryczna lub parametr wyjdzie poza zakres. 
ReferenceError
Tworzy instancje reprezentującą błąd, który występuje przy próbie odwołania do nieistniejącego zasobu.
SyntaxError
Tworzy instancje reprezentującą błąd składni, który występuje przy parsowaniu kodu przy pomocy eval().
TypeError
Tworzy instancję reprezentującą błąd, który występuje gdy zmienna lub parametr mają niepoprawny typ.
URIError
Tworzy instancję reprezentującą błąd, który występuje gdy encodeURI() i decodeURI() mają przekazane nieprawidłowe parametry.

Właściwości

Error.prototype
Pozwala na dodawanie właściwości do instancji klasy Error.

Metody

Globalny obiekt Error sam w sobie nie zawiera metod, niemniej, dziedziczy on niektóre metody z łańcucha prototypów.

Error instancje

All Error instances and instances of non-generic errors inherit from Error.prototype. As with all constructor functions, you can use the prototype of the constructor to add properties or methods to all instances created with that constructor.

Właściwości

Standard properties

Error.prototype.constructor
Specifies the function that created an instance's prototype.
Error.prototype.message
Error message.
Error.prototype.name
Error name.

Vendor-specific extensions

Niestandardowy
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

Microsoft

Error.prototype.description
Error description. Similar to message.
Error.prototype.number
Error number.

Mozilla

Error.prototype.fileName
Path to file that raised this error.
Error.prototype.lineNumber
Line number in file that raised this error.
Error.prototype.columnNumber
Column number in line that raised this error.
Error.prototype.stack
Stack trace.

Metody

Error.prototype.toSource()
Returns a string containing the source of the specified Error object; you can use this value to create a new object. Overrides the Object.prototype.toSource() method.
Error.prototype.toString()
Returns a string representing the specified object. Overrides the Object.prototype.toString() method.

Przykłady

Rzucanie ogólnego błędu

Zazwyczaj tworzysz obiekt Error w celu wywołania go przy użyciu słowa kluczowego throw. Możesz obsłużyć tak rzucony błąd przy pomocy konstrukcji try...catch:

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

Obsługa specyficznych błędów

Jeżeli chcesz możesz obsługiwać tylko specyficzny rodzaj błędu poprzez użycie właściwości jego constructor lub, jeżeli używasz nowoczesnego silnika JavaScript, poprzez słowo kluczowe instanceof:

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

Niestandardowe typy błędów

Możesz chcieć zdefiniować własny typ błędu pochodzący z klasy Error z możliwością rzucenia błędu throw new MyError() i użycia instanceof MyError w celu sprawdzenia jego rodzaju. Skutkuje to czystszym i spójniejszym kodem obsługi błędów. Zobacz "What's a good way to extend Error in JavaScript?" na StackOverflow dla dogłębniejszej analizy.

ES6 Custom Error Class

Babel i inne transpilatory nie potrafią poprawnie obsłużyć podanego kodu bez dodatkowej konfiguracji.

Some browsers include the CustomError constructor in the stack trace when using ES2015 classes.

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);
    }

    // Custom debugging information
    this.foo = foo;
    this.date = new Date();
  }
}

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

ES5 Custom Error Object

All browsers include the CustomError constructor in the stack trace when using a prototypal declaration.

function CustomError(foo, message, fileName, lineNumber) {
  var instance = new Error(message, fileName, lineNumber);
  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.log(e.foo); //baz
  console.log(e.message) ;//bazMessage
}

Specyfikacja

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Początkowa definicja. Zaimplementowana w JavaScript 1.1.
ECMAScript 5.1 (ECMA-262)
The definition of 'Error' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Error' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Error' in that specification.
Draft  

Kompatybilność

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support Yes Yes16 Yes Yes
prototype Yes Yes16 Yes Yes
columnNumber No No1 No No No
fileName No No1 No No No
lineNumber No No1 No No No
message Yes Yes16 Yes Yes
name Yes Yes16 Yes Yes
stack Yes Yes110 Yes6
toSource No No1 No No No
toString Yes Yes16 Yes Yes
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes Yes Yes4 Yes Yes Yes
prototype Yes Yes Yes4 Yes Yes Yes
columnNumber No No No4 No No No
fileName No No No4 No No No
lineNumber No No No4 No No No
message Yes Yes Yes4 Yes Yes Yes
name Yes Yes Yes4 Yes Yes Yes
stack Yes Yes Yes4 Yes6 Yes
toSource No No No4 No No No
toString Yes Yes Yes4 Yes Yes Yes

Zobacz także

Autorzy i etykiety dokumentu

Autorzy tej strony: mitelak, fscholz
Ostatnia aktualizacja: mitelak,