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ๅนด7ๆโฉ.
* Some parts of this feature may have varying levels of support.
Error
ใชใใธใงใฏใใฏใๅฎ่กๆใจใฉใผใ็บ็ใใๆใซ็บ็ใใพใใ Error
ใชใใธใงใฏใใฏใใฆใผใถใผๅฎ็พฉใฎไพๅคใฎๅบๅบใชใใธใงใฏใใจใใฆไฝฟ็จใใใใจใใงใใพใใๆจๆบใฎ็ตใฟ่พผใฟใจใฉใผๅใซใคใใฆใฏไธ่จใๅ็
งใใฆใใ ใใใ
่งฃ่ชฌ
ๅฎ่กๆใจใฉใผใ็บ็ใใใจใๆฐใใ Error
ใชใใธใงใฏใใ็ๆใใในใญใผใใใพใใ
Error
ใฏใทใชใขใฉใคใบๅฏ่ฝใชใใธใงใฏใใชใฎใงใ structuredClone()
ใง่ค่ฃฝใใใใใฏใผใซใผ้ใง postMessage()
ใไฝฟ็จใใฆใณใใผใใใใใใใจใใงใใพใใ
ใจใฉใผใฎๅ
JavaScript ใซใฏใไธ่ฌ็ใช Error
ใณใณในใใฉใฏใฟใผใฎไปใซใไธญๆ ธใจใชใไปใฎใจใฉใผใณใณในใใฉใฏใฟใผใใใใพใใใฏใฉใคใขใณใๅดใฎไพๅคใซใคใใฆใฏใไพๅคๅฆ็ๆใๅ็
งใใฆใใ ใใใ
EvalError
-
ใฐใญใผใใซ้ขๆฐ
eval()
ใซ้ขใใฆ็บ็ใใใจใฉใผใ่กจใใคใณในใฟใณในใ็ๆใใพใใ RangeError
-
ๆฐๅคๅคๆฐใพใใฏๅผๆฐใใใใฎๆๅน็ฏๅฒๅคใงใใๅ ดๅใซ็บ็ใใใจใฉใผใ่กจใใคใณในใฟใณในใ็ๆใใพใใ
ReferenceError
-
ไธๆญฃใชๅ็ งใใๅ็ งๅ ใฎๅคใๅๅพใใๆใซ็บ็ใใใจใฉใผใ่กจใใคใณในใฟใณในใ็ๆใใพใใ
SyntaxError
-
ๆงๆใจใฉใผใ่กจใใคใณในใฟใณในใ็ๆใใพใใ
TypeError
-
ๅคๆฐใพใใฏๅผๆฐใฎๅใๆๅนใงใชใๅ ดๅใซ็บ็ใใใจใฉใผใ่กจใใคใณในใฟใณในใ็ๆใใพใใ
URIError
-
encodeURI()
ใพใใฏdecodeURI()
ใซไธๆญฃใชๅผๆฐใๆธกใใใๆใซ็บ็ใใใจใฉใผใ่กจใใคใณในใฟใณในใ็ๆใใพใใ AggregateError
-
ๅฆ็ใใ่คๆฐใฎใจใฉใผใๅ ฑๅใใๅฟ ่ฆใใใๅ ดๅ๏ผไพใใฐ
Promise.any()
๏ผใซ่คๆฐใฎใจใฉใผใๅไธใฎใชใใธใงใฏใใจใใฆ่กจ็พใใใคใณในใฟใณในใ็ๆใใพใใ InternalError
-
"too much recursion" (ๆทฑใใใๅๅธฐ) ใชใฉใJavaScript ใจใณใธใณใงๅ ้จใจใฉใผใ็บ็ใใๆใซ็บ็ใใใจใฉใผใ่กจใใคใณในใฟใณในใ็ๆใใพใใ
ใณใณในใใฉใฏใฟใผ
Error()
-
ๆฐใใ
Error
ใชใใธใงใฏใใ็ๆใใพใใ
้็ใกใฝใใ
Error.captureStackTrace()
้ๆจๆบ-
ๆจๆบๅคใฎ V8 ใฎ้ขๆฐใงใ Error ใคใณในใฟใณในใซ
stack
ใใญใใใฃใ็ๆใใพใใ Error.stackTraceLimit
้ๆจๆบ-
ๆจๆบๅคใฎ V8 ใฎๆฐๅคใใญใใใฃใงใใจใฉใผใฎในใฟใใฏใใฌใผในใซๅซใใในใฟใใฏใใฌใผใ ใฎๆฐใๅถ้ใใพใใ
Error.prepareStackTrace()
้ๆจๆบ ็็ฅๅฏ-
ๆจๆบๅคใฎ V8 ใฎ้ขๆฐใงใ๏ผใฆใผใถใผใณใผใใใๆไพใใใๅ ดๅใซ๏ผ็บ็ใใไพๅคใซๅฏพใใฆ V8 Javascript ใจใณใธใณใซใใฃใฆๅผใณๅบใใใใฆใผใถใผใฏในใฟใใฏใใฌใผในใ็ฌ่ชใซใใฉใผใใใใใใใจใใงใใพใใ
ใคใณในใฟใณในใใญใใใฃ
ใใใใฎใใญใใใฃใฏ 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
ใใญใใใฃใจใใฆๆธกใใใๅคใ Error.prototype.columnNumber
-
ๆจๆบๅคใฎ Mozilla ใฎใใญใใใฃใงใใใฎใจใฉใผใ็บ็ใใ่กๅ ใฎๆก็ชๅทใงใใ
Error.prototype.fileName
-
ๆจๆบๅคใฎ Mozilla ใฎใใญใใใฃใงใใใฎใจใฉใผใ็บ็ใใใใกใคใซใธใฎใในใงใใ
Error.prototype.lineNumber
-
ๆจๆบๅคใฎ Mozilla ใฎใใญใใใฃใงใใใฎใจใฉใผใ็บ็ใใใใกใคใซๅ ใฎ่ก็ชๅทใงใใ
Error.prototype.message
-
ใจใฉใผใกใใปใผใธใ
ใคใณในใฟใณในใกใฝใใ
Error.prototype.toString()
-
ๆๅฎใใใชใใธใงใฏใใ่กจใๆๅญๅใ่ฟใใพใใ
Object.prototype.toString()
ใกใฝใใใไธๆธใใใพใใ
ไพ
ไธ่ฌ็ใชใจใฉใผใ็บ็ใใใ
้ๅธธใthrow
ใญใผใฏใผใใไฝฟใๆๅณ็ใซใจใฉใผใ็บ็ใใใฆ Error
ใชใใธใงใฏใใ็ๆใใพใใ try...catch
ๆงๆใไฝฟ็จใใฆใจใฉใผใๅฆ็ใใฆใใ ใใ:
try {
throw new Error("Whoops!");
} 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 {
// ใใใใฎๅ ดๅใซใใใใใใชใๅ ดๅใErrorใๆชๅฏพๅฆใฎใพใพใซใใ
throw e;
}
}
้กไผผใใใจใฉใผใจๅบๅฅใใ
็ฐใชใๅฏพๅฆใๅฟ ่ฆใชๅๅ ใงๅคฑๆใใใซใใใใใใใใณใผใใใญใใฏใ้ๅธธใซใใไผผใใจใฉใผ๏ผใใชใใกๅใๅใใกใใปใผใธ๏ผใๆใใใใจใใใใพใใ
็บ็ใใๅ
ใฎใจใฉใผใ็ฎก็ไธใซใชใๅ ดๅใใจใฉใผใๆๆใใฆใใ่ฉณ็ดฐใชใกใใปใผใธใๆใคๆฐใใ Error
ใชใใธใงใฏใใๆใใใใจใไธใคใฎ้ธๆ่ขใจใชใใพใใ
ๅ
ใฎใจใฉใผใฏๆฐใใ Error
ใฎใณใณในใใฉใฏใฟใผใฎ options
ใใฉใกใผใฟใผใฎ cause
ใใญใใใฃใซๆธกใในใใงใใใใใซใใฃใฆใไธไฝใฎ try/catch ใใญใใฏใๅ
ใฎใจใฉใผใจในใฟใใฏใใฌใผในใๅฉ็จใงใใใใจใไฟ่จผใใพใใ
ไปฅไธใฎไพใฏใไผผใใจใฉใผใงๅคฑๆใใ 2 ใคใฎใกใฝใใใ็คบใใฆใใพใ๏ผdoFailSomeWay()
ใจ doFailAnotherWay()
๏ผ:
function doWork() {
try {
doFailSomeWay();
} catch (err) {
throw new Error("Failed in some way", { cause: err });
}
try {
doFailAnotherWay();
} catch (err) {
throw new Error("Failed in another way", { cause: err });
}
}
try {
doWork();
} catch (err) {
switch (err.message) {
case "Failed in some way":
handleFailSomeWay(err.cause);
break;
case "Failed in another way":
handleFailAnotherWay(err.cause);
break;
}
}
ใกใข: ใใใใชใใใฉใคใใฉใชใๅถไฝใใฆใใใชใใๅฉ็จ่ ใซใจใฉใผใกใใปใผใธใใใผในใใใใใ้กใใใใใใ็บ็ใใใจใฉใผใๅบๅฅใใใใใซ Error ใฎ cause ใไฝฟ็จใในใใงใใไพใซใคใใฆใฏ Error ใฎ cause ใใผใธ ใใ่ฆงใใ ใใใ
ใตใใฏใฉในใฎใณใณในใใฉใฏใฟใผใ super()
ใๅผใณๅบใใจใใซ options
ใใฉใกใผใฟใผใๆธกใใฐใ็ฌ่ชใฎใจใฉใผๅใ cause
ใใญใใใฃใๅฉ็จใงใใพใใๅบๅบใฏใฉในใฎใณใณในใใฉใฏใฟใผ Error()
ใฏ options.cause
ใ่ชญใฟๅใฃใฆใๆฐใใใจใฉใผใฎใคใณในใฟใณในใซ cause
ใใญใใใฃใๅฎ็พฉใใพใใ
class MyError extends Error {
constructor(message, options) {
// "cause" ใใญใใใฃใ่จญๅฎใใใใใซ็ฌฌไบๅผๆฐใซ `options` ใๆธกใๅฟ
่ฆใใใใ
super(message, options);
}
}
console.log(new MyError("test", { cause: new Error("cause") }).cause);
// Error: cause
็ฌ่ชใฎใจใฉใผๅ
Error
ใใๆดพ็ใใ็ฌ่ชใฎใจใฉใผๅใๅฎ็พฉใใฆ throw new CustomError()
ใใงใใใใใซใใinstanceof CustomError
ใงไพๅคใใณใใฉใผๅ
ใฎใจใฉใผใฎ็จฎ้กใ็ขบ่ชใใใใงใใใใใใใ่กใไธ่ฌ็ใชๆนๆณใฎๅฎไพใไปฅไธใซ็คบใใพใใ
StackOverflow ใฎ็ชใฃ่พผใใ ่ญฐ่ซใ "What's a good way to extend Error in JavaScript?" ใๅ็ งใใฆใใ ใใใ
่ญฆๅ: ็ตใฟ่พผใฟใฎใตใใฏใฉในๅใฏใES6 ใใๅคใใณใผใใซ็ขบๅฎใซใใฉใณในใใคใซใงใใใใใงใฏใใใพใใใใชใใชใใ
Reflect.construct()
ใไฝฟใใใซ็นๅฎใฎnew.target
ใๆใคๅบๅบใฏใฉในใๆง็ฏใใๆๆฎตใใชใใใใงใใ่ฟฝๅ ใฎ่จญๅฎใ่กใใใใณใณในใใฉใฏใฟใผใฎๆๅพใงObject.setPrototypeOf(this, CustomError.prototype)
ใๆๅใงๅผใถๅฟ ่ฆใใใใพใใใใใใชใใจใๆง็ฏใใใใคใณในใฟใณในใฏCustomError
ใฎใคใณในใฟใณในใซใชใใพใใใ่ฉณใใใฏ the TypeScript FAQ ใใ่ฆงใใ ใใใ
ใกใข:
ES2015 ใฏใฉในใไฝฟ็จใใๅ ดๅใไธ้จใฎใใฉใฆใถใผใฏในใฟใใฏใใฌใผในไธใซ CustomError
ใณใณในใใฉใฏใฟใผใๅซใใพใใ
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ยฎ 2026 Language Specification # sec-error-objects |
ใใฉใฆใถใผใฎไบๆๆง
Loadingโฆ
้ข้ฃๆ ๅ ฑ
- Polyfill of
Error
withcause
support incore-js
throw
try...catch
- V8 ใใญใฅใกใณใ Stack trace API