Error
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
* Some parts of this feature may have varying levels of support.
ÐкземплÑÑÑ Ð¾Ð±ÑекÑа Error вÑбÑаÑÑваÑÑÑÑ Ð¿Ñи возникновении оÑибок во вÑÐµÐ¼Ñ Ð²ÑполнениÑ. ÐбÑÐµÐºÑ Error Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² каÑеÑÑве базового Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкиÑ
иÑклÑÑений. СмоÑÑиÑе ниже ÑÑандаÑÑнÑе вÑÑÑоеннÑе ÑÐ¸Ð¿Ñ Ð¾Ñибок.
ÐпиÑание
Ðо вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° оÑибки пÑиводÑÑ Ðº ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ вÑбÑаÑÑÐ²Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÑÑ
обÑекÑов Error.
Error ÑвлÑеÑÑÑ ÑеÑиализÑемÑм обÑекÑом, поÑÑÐ¾Ð¼Ñ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ»Ð¾Ð½Ð¸Ñован Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ structuredClone() или пеÑедан Ð¼ÐµÐ¶Ð´Ñ Ð²Ð¾ÑкеÑами Ñ Ð¸ÑполÑзованием postMessage().
Ð¢Ð¸Ð¿Ñ Ð¾Ñибок
ÐÑоме обÑего конÑÑÑÑкÑоÑа Error, в JavaScript ÑÑÑеÑÑвÑÑÑ Ð´ÑÑгие вÑÑÑоеннÑе конÑÑÑÑкÑоÑÑ Ð¾Ñибок, ÑмоÑÑиÑе Ñаздел ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±ÑабоÑки иÑклÑÑений.
EvalError-
СоздаÑÑ ÑкземплÑÑ, пÑедÑÑавлÑÑÑий оÑибкÑ, возникаÑÑÑÑ Ð² глобалÑной ÑÑнкÑии
eval(). RangeError-
СоздаÑÑ ÑкземплÑÑ, пÑедÑÑавлÑÑÑий оÑибкÑ, возникаÑÑÑÑ Ð¿Ñи вÑÑ Ð¾Ð´Ðµ ÑиÑловой пеÑеменной или паÑамеÑÑа за пÑÐµÐ´ÐµÐ»Ñ Ð´Ð¾Ð¿ÑÑÑимого диапазона.
ReferenceError-
СоздаÑÑ ÑкземплÑÑ, пÑедÑÑавлÑÑÑий оÑибкÑ, возникаÑÑÑÑ Ð¿Ñи ÑазÑменовÑвании недопÑÑÑимой ÑÑÑлки.
SyntaxError-
СоздаÑÑ ÑкземплÑÑ, пÑедÑÑавлÑÑÑий ÑинÑакÑиÑеÑкÑÑ Ð¾ÑибкÑ, возникаÑÑÑÑ Ð¿Ñи ÑазбоÑе иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кода в ÑÑнкÑии
eval(). TypeError-
СоздаÑÑ ÑкземплÑÑ, пÑедÑÑавлÑÑÑий оÑибкÑ, возникаÑÑÑÑ Ð¿Ñи недопÑÑÑимом Ñипе Ð´Ð»Ñ Ð¿ÐµÑеменной или паÑамеÑÑа.
URIError-
СоздаÑÑ ÑкземплÑÑ, пÑедÑÑавлÑÑÑий оÑибкÑ, возникаÑÑÑÑ Ð¿Ñи пеÑедаÑе в ÑÑнкÑии
encodeURI()илиdecodeURI()недопÑÑÑимÑÑ Ð¿Ð°ÑамеÑÑов. AggregateError-
СоздаÑÑ ÑкземплÑÑ, пÑедÑÑавлÑÑÑий неÑколÑко оÑибок, обÑÑнÑÑÑÑ Ð² однÑ. ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, напÑимеÑ, пÑи ÑабоÑе Ñ
Promise.any(). InternalError-
СоздаÑÑ ÑкземплÑÑ, пÑедÑÑавлÑÑÑий оÑибкÑ, возникаÑÑÑÑ Ð¿Ñи вÑбÑаÑÑвании внÑÑÑенней оÑибки в движке JavaScript. РпÑимеÑÑ, оÑибки «ÑлиÑком глÑÐ±Ð¾ÐºÐ°Ñ ÑекÑÑÑиÑ» («too much recursion»).
ÐонÑÑÑÑкÑоÑ
Error()-
СоздаÑÑ Ð½Ð¾Ð²Ñй обÑекÑ
Error.
СÑаÑиÑеÑкие меÑодÑ
Error.captureStackTrace()-
ÐеÑÑандаÑÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ V8, коÑоÑÐ°Ñ ÑоздаÑÑ ÑвойÑÑво
stackÑ ÑкземплÑÑаError. Error.stackTraceLimit-
ÐеÑÑандаÑÑное ÑиÑловое ÑвойÑÑво V8, коÑоÑое огÑаниÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑовней оÑибок, вклÑÑаемÑÑ Ð² ÑÑаÑÑиÑÐ¾Ð²ÐºÑ ÑÑека.
Error.prepareStackTrace()ÐеобÑзаÑелÑнÑй-
ÐеÑÑандаÑÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ V8, коÑоÑÐ°Ñ (еÑли задана в полÑзоваÑелÑÑком коде) вÑзÑваеÑÑÑ JavaScript-движком V8 Ð´Ð»Ñ Ð²ÑбÑаÑÑвание иÑклÑÑений, позволÑÑ Ð¾Ð¿ÑеделÑÑÑ Ð½ÐµÑÑандаÑÑное ÑоÑмаÑиÑование ÑÑаÑÑиÑовки ÑÑека.
СвойÑÑва ÑкземплÑÑа
ÐÑи ÑвойÑÑва опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð² Error.prototype и еÑÑÑ Ñ Ð²ÑеÑ
ÑкземплÑÑов Error.
Error.prototype.constructor-
ФÑнкÑиÑ-конÑÑÑÑкÑоÑ, ÑоздаÑÑÐ°Ñ ÑкземплÑÑ Ð¾Ð±ÑекÑа. ÐÐ»Ñ ÑкземплÑÑов
ErrorнаÑалÑнÑм знаÑением ÑвлÑеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑоÑError. Error.prototype.name-
ÐÑедÑÑавлÑÐµÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ñипа оÑибки. ÐаÑалÑнÑм знаÑением
Error.prototype.nameÑвлÑеÑÑÑ"Error". ÐодклаÑÑÑ (напÑимеÑ,TypeErrorиSyntaxError) имеÑÑ ÑобÑÑвеннÑе знаÑÐµÐ½Ð¸Ñ ÑвойÑÑваname. Error.prototype.stack-
ÐеÑÑандаÑÑное ÑвойÑÑво, ÑодеÑжаÑее ÑÑаÑÑиÑÐ¾Ð²ÐºÑ ÑÑека.
ÐÑи ÑвойÑÑва ÑвлÑÑÑÑÑ ÑобÑÑвеннÑми ÑвойÑÑвами каждого ÑкземплÑÑа Error.
cause-
ÐÑиÑина Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ ÑекÑÑей оÑибки â обÑÑно ÑÑо дÑÑÐ³Ð°Ñ Ð¾Ð±Ð½Ð°ÑÑÐ¶ÐµÐ½Ð½Ð°Ñ Ð¾Ñибка. ÐÐ»Ñ ÑозданнÑÑ Ð¿Ð¾Ð»ÑзоваÑелем обÑекÑов
ErrorÑÑо знаÑение ÑвойÑÑваcauseвÑоÑого аÑгÑменÑа конÑÑÑÑкÑоÑа. -
ÐеÑÑандаÑÑное ÑвойÑÑво Mozilla, опÑеделÑÑÑее Ð½Ð¾Ð¼ÐµÑ Ñимвола в ÑÑÑоке, в коÑоÑой возникла оÑибка.
fileName-
ÐеÑÑандаÑÑное ÑвойÑÑво Mozilla, опÑеделÑÑÑее пÑÑÑ Ðº ÑайлÑ, в коÑоÑом возникла оÑибка.
lineNumber-
ÐеÑÑандаÑÑное ÑвойÑÑво Mozilla, опÑеделÑÑÑее Ð½Ð¾Ð¼ÐµÑ ÑÑÑоки в Ñайле, где возникла оÑибка.
message-
СообÑение об оÑибке. ÐÐ»Ñ ÑозданнÑÑ Ð¿Ð¾Ð»ÑзоваÑелем обÑекÑов
ErrorÑÑо ÑÑÑока, пеÑÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ð°Ñ Ð² каÑеÑÑве пеÑвого аÑгÑменÑа конÑÑÑÑкÑоÑа.
ÐеÑÐ¾Ð´Ñ ÑкземплÑÑа
Error.prototype.toString()-
ÐозвÑаÑÐ°ÐµÑ ÑÑÑокÑ, пÑедÑÑавлÑÑÑÑÑ ÑказаннÑй обÑекÑ. ÐеÑеопÑеделÑÐµÑ Ð¼ÐµÑод
Object.prototype.toString().
ÐÑимеÑÑ
>ÐÑбÑаÑÑвание обÑÑной оÑибки
ÐбÑÑно, Ð²Ñ ÑоздаÑÑе обÑÐµÐºÑ Error Ñ Ð½Ð°Ð¼ÐµÑением возбÑдиÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ»ÑÑевого Ñлова throw. ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑабоÑаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑии try...catch:
try {
throw new Error("Ðй!");
} catch (e) {
console.error(`${e.name}: ${e.message}`);
}
ÐбÑабоÑка оÑибки конкÑеÑного Ñипа
ÐÐ»Ñ Ð¾Ð±ÑабоÑки ÑолÑко опÑеделÑннÑÑ
Ñипов оÑибок можно делаÑÑ Ð¿ÑовеÑÐºÑ Ñипа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ»ÑÑевого Ñлова instanceof:
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}`);
}
// и Ñак далее
else {
// ÐÑли ни один из Ñипов не Ñовпал, Ñо оÑÑавлÑем оÑÐ¸Ð±ÐºÑ Ð½ÐµÐ¾Ð±ÑабоÑанной
throw e;
}
}
ÐолÑзоваÑелÑÑкие ÑÐ¸Ð¿Ñ Ð¾Ñибок
ÐÑ Ð¼Ð¾Ð¶ÐµÑе заÑ
оÑеÑÑ Ð¾Ð¿ÑеделиÑÑ Ñвои ÑобÑÑвеннÑе ÑÐ¸Ð¿Ñ Ð¾Ñибок, ÑнаÑледованнÑе Ð¾Ñ Error, ÑÑÐ¾Ð±Ñ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð²Ð¾Ð·Ð±ÑждаÑÑ Ð¸Ñ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ throw new MyError() и иÑполÑзоваÑÑ instanceof MyError Ð´Ð»Ñ Ð¿ÑовеÑки вида оÑибки в обÑабоÑÑике иÑклÑÑений. ÐÑо Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð´ÐµÐ»Ð°ÑÑ Ð¾Ð±ÑабоÑÐºÑ Ð¾Ñибок более понÑÑной.
Также ÑмоÑÑиÑе обÑÑждение «Ðакой ÑпоÑоб ÑаÑÑиÑÐµÐ½Ð¸Ñ Error в JavaScript более пÑедпоÑÑиÑелен?» на StackOverflow.
ÐÑедÑпÑеждение:
ÐÑÑÑоеннÑе подклаÑÑÑ Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð½Ð°Ð´Ñжно пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² ES6 код, поÑÐ¾Ð¼Ñ ÑÑо Ð½ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи ÑоздаÑÑ Ð±Ð°Ð·Ð¾Ð²Ñй клаÑÑ Ñо ÑпеÑиÑиÑнÑм new.target без Reflect.construct(). ТÑебÑеÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¸Ð»Ð¸ ÑÑÑной вÑзов Object.setPrototypeOf(this, CustomError.prototype) в конÑе конÑÑÑÑкÑоÑа, инаÑе ÑоздаваемÑй ÑкземплÑÑ Ð½Ðµ бÑÐ´ÐµÑ ÑкземплÑÑом CustomError. СмоÑÑиÑе TypeScript FAQ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии.
ÐÑимеÑание:
ÐекоÑоÑÑе бÑаÑзеÑÑ Ð²ÐºÐ»ÑÑаÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ CustomError в ÑÑаÑÑиÑÐ¾Ð²ÐºÑ ÑÑека пÑи иÑполÑзовании клаÑÑов ES2015.
class CustomError extends Error {
constructor(foo = "bar", ...params) {
// ÐеÑедаÑм вÑе аÑгÑменÑÑ (вклÑÑÐ°Ñ ÑпеÑиÑиÑнÑе Ð´Ð»Ñ Ð¿ÑоизводиÑÐµÐ»Ñ Ð´Ð²Ð¸Ð¶ÐºÐ°) ÑодиÑелÑÑÐºÐ¾Ð¼Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑÑ
super(...params);
// ÐоддеÑживаем ÑооÑвеÑÑÑвÑÑÑÑÑ ÑÑаÑÑиÑÐ¾Ð²ÐºÑ ÑÑека Ñ Ñказанием меÑÑа Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¾Ñибки (доÑÑÑпно ÑолÑко в V8)
if (Error.captureStackTrace) {
Error.captureStackTrace(this, CustomError);
}
this.name = "CustomError";
// ÐополниÑелÑÐ½Ð°Ñ Ð¾ÑладоÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
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
}
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-error-objects > |
СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами
СмоÑÑиÑе Ñакже
- ÐолиÑил
ErrorÑ Ð¿Ð¾Ð´Ð´ÐµÑжкойcauseвcore-js throwtry...catch- Stack trace API в докÑменÑаÑии V8