Error
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
Non-Standard- Opcjonalny. Wartość dla parametru
fileName
przy tworzeniu obiektuError
. Domyślnie to nazwa pliku zawierającego kod, który wywołał konstruktor. lineNumber
Non-Standard- Opcjonalny. Wartość dla paramteru
lineNumber
przy tworzeniu obiektuError
. Domyślnie zawiera numer linijki zawirającej wywołanie konstruktora klasyError
.
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
(en-US).
Używanie jako funkcja
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!');
// działa tak samo 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()
(en-US). InternalError
Non-Standard- 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()
(en-US). 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()
idecodeURI()
mają przekazane nieprawidłowe parametry.
Właściwości
Error.prototype
(en-US)- 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
Właściwości
Metody
Przykłady
Rzucanie ogólnego błędu
Zazwyczaj tworzysz obiekt Error
w celu wywołania go przy użyciu słowa kluczowego throw
(en-US). Możesz obsłużyć tak rzucony błąd przy pomocy konstrukcji try...catch
(en-US):
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
(en-US):
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.
Nie które przeglądarki dodają constructor CustomError
w stosie błędu kiedy używamy klas ES2015
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
Wszystkie przeględarki dodają konstruktor CustomError
kiedy używasz konstruktora z wykorzystaniem prototype
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 (ECMA-262) The definition of 'Error' in that specification. |
Living Standard |
Kompatybilność
BCD tables only load in the browser