Baseline Widely available *
ÐкземплÑÑÑ Ð¾Ð±ÑекÑа 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
}
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4