Baseline Widely available *
å½è¿è¡æ¶éè¯¯äº§çæ¶ï¼Error
对象ä¼è¢«æåºãError
对象ä¹å¯ç¨äºç¨æ·èªå®ä¹çå¼å¸¸çåºç¡å¯¹è±¡ãä¸é¢ååºäºåç§å
å»ºçæ åé误类åã
å½ä»£ç è¿è¡æ¶çåçé误ï¼ä¼å建æ°ç Error
对象ï¼å¹¶å°å
¶æåºã
é¤äºéç¨ç Error
æé 彿°å¤ï¼JavaScript è¿æå
¶ä»ç±»åçé误æé 彿°ã对äºå®¢æ·ç«¯å¼å¸¸ï¼è¯¦è§å¼å¸¸å¤çè¯å¥ã
EvalError
å建ä¸ä¸ª error å®ä¾ï¼è¡¨ç¤ºé误çåå ï¼ä¸ eval()
æå
³ã
RangeError
å建ä¸ä¸ª error å®ä¾ï¼è¡¨ç¤ºé误çåå ï¼æ°å¼åéæåæ°è¶ åºå ¶ææèå´ã
ReferenceError
å建ä¸ä¸ª error å®ä¾ï¼è¡¨ç¤ºé误çåå ï¼æ æå¼ç¨ã
SyntaxError
å建ä¸ä¸ª error å®ä¾ï¼è¡¨ç¤ºé误çåå ï¼è¯æ³é误ã
TypeError
å建ä¸ä¸ª error å®ä¾ï¼è¡¨ç¤ºé误çåå ï¼åéæåæ°ä¸å±äºææç±»åã
URIError
å建ä¸ä¸ª error å®ä¾ï¼è¡¨ç¤ºé误çåå ï¼ç» encodeURI()
æ decodeURI()
ä¼ éçåæ°æ æã
AggregateError
å建ä¸ä¸ª error å®ä¾ï¼å
¶ä¸å
裹äºç±ä¸ä¸ªæä½äº§çä¸éè¦æ¥åçå¤ä¸ªé误ãå¦ï¼Promise.any()
产ççé误ã
InternalError
éæ å
å建ä¸ä¸ªä»£è¡¨ Javascript 弿å é¨é误çå¼å¸¸æåºçå®ä¾ãå¦ï¼éå½å¤ªå¤ã
Error()
å建ä¸ä¸ªæ°ç Error
对象ã
Error.captureStackTrace()
éæ å
ä¸ä¸ªéæ åç V8 彿°ï¼ç¨äºå¨ Error å®ä¾ä¸å建 stack
屿§ã
Error.stackTraceLimit
éæ å
ä¸ä¸ªéæ åç V8 æ°å¼å±æ§ï¼ç¨äºéå¶éè¯¯å æ è·è¸ªä¸å å«å æ 帧æ°éã
Error.prepareStackTrace()
éæ å å¯é
ä¸ä¸ªéæ åç V8 彿°ï¼å¦ææä¾äºè¿ä¸å½æ°ï¼V8 JavaScript 弿ä¼è°ç¨è¯¥å½æ°æ¥æåºå¼å¸¸ãè¿ä¸ªå½æ°å è®¸ç¨æ·æä¾èªå®ä¹çå æ è·è¸ªæ ¼å¼ã
Error.prototype.message
éè¯¯æ¶æ¯ã对äºç¨æ·å建ç Error
对象ï¼è¿æ¯æé 彿°ç第ä¸ä¸ªåæ°æä¾çå符串ã
Error.prototype.name
é误åç§°ãè¿æ¯ç±æé 彿°å³å®çã
Error.prototype.cause
表示导è´å½åé误被æåºçåå ââé常æ¯å¦ä¸ä¸ªé误ã对äºç¨æ·å建ç Error
对象ï¼è¿æ¯æé 彿°ç第äºä¸ªåæ°æä¾çå¼ã
Error.prototype.fileName
éæ å
ä¸ä¸ªéæ åç Mozilla 屿§ï¼ç¨äºè¡¨ç¤ºå¼åæ¤é误çæä»¶çè·¯å¾ã
Error.prototype.lineNumber
éæ å
ä¸ä¸ªéæ åç Mozilla 屿§ï¼ç¨äºè¡¨ç¤ºå¼åæ¤é误çä»£ç æå¨çæä»¶çè¡å·ã
Error.prototype.columnNumber
éæ å
ä¸ä¸ªéæ åç Mozilla 屿§ï¼ç¨äºè¡¨ç¤ºå¼åæ¤é误ç代ç 卿件䏿å¨è¡çåå·ã
Error.prototype.stack
éæ å
ä¸ä¸ªéæ åç屿§ï¼ç¨äºå æ è·è¸ªã
Error.prototype.toString()
è¿å表示该对象çå符串ãè¦çäº Object.prototype.toString()
æ¹æ³ã
éå¸¸ä½ ä¼ä½¿ç¨ throw
å
³é®åæ¥æåºä½ å建ç Error
对象ãå¯ä»¥ä½¿ç¨ try...catch
ç»ææ¥å¤çå¼å¸¸ï¼
try {
throw new Error("Whoops!");
} catch (e) {
console.error(e.name + ": " + e.message);
}
å¤çä¸ä¸ªç¹å®é误
ä½ å¯ä»¥éè¿å¤æå¼å¸¸çç±»åæ¥ç¹å®å¤çæä¸ç±»çå¼å¸¸ï¼å³å¤æ constructor
屿§ï¼å½ä½¿ç¨ç°ä»£ JavaScript 弿æ¶ï¼å¯ä½¿ç¨ 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);
}
// ... etc
else {
// If none of our cases matched leave the Error unhandled
throw e;
}
}
åºåç¸ä¼¼çé误
ææ¶ï¼å¯¹äºä»£ç åçé误éè¦æ ¹æ®å ¶åå è¿è¡ä¸åçå¤çï¼ä½é误çåå åè¾ä¸ºç¸ä¼¼ï¼ä¾å¦ï¼é误çç±»ååæ¶æ¯åç¸åï¼ã
å¦æä½ æ æ³æ§å¶åæé误çæåºï¼é£ä¹ä¸ç§æ¹æ³æ¯æè·é误ç¶åæåºä¸ä¸ªæ°çé误ï¼å¹¶å¨æ°çé误ä¸ç»åºæ´å å
·ä½çéè¯¯æ¶æ¯ãåå§é误åºè¯¥è¢«ä¼ éå°æ°ç Error
çæé 彿°ç option
åæ°ï¼cause
屿§ï¼ä¸ï¼è¿ç¡®ä¿äºåå§çé误åå æ 追踪信æ¯å¨ä¸å±ç try/catch åä¸å¯ç¨ã
以ä¸ç¤ºä¾å±ç¤ºäºä¸¤ç§æ¹æ³ä¼å¨å¤±è´¥æ¶æåºç¸ä¼¼çé误ï¼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;
}
}
夿³¨ï¼ å¦æä½ å¨å建ä¸ä¸ªå½æ°åºï¼ä½ åºè¯¥ä½¿ç¨é误åå æ¥åºåä¸åçé误ââè䏿¯è¦æ±ä½ ç彿°åºç使ç¨è æ¥è§£æéè¯¯æ¶æ¯ãç¸å ³ç示ä¾ï¼è¯·åè§æä¾é误åå ã
èªå®ä¹é误类åä¹å¯ä»¥ä½¿ç¨ cause
屿§ï¼åææ¯éè¿ super()
è°ç¨åç±»çæé 彿°æ¶ä¼ é options
åæ°ã
class MyError extends Error {
constructor(/* some arguments */) {
// Needs to pass both `message` and `options` to install the "cause" property.
super(message, options);
}
}
èªå®ä¹é误类å
ä½ å¯è½å¸æèªå®ä¹åºäº Error
çå¼å¸¸ç±»åï¼ä½¿å¾ä½ è½å¤ throw new MyError()
å¹¶å¯ä»¥ä½¿ç¨ instanceof MyError
æ¥æ£æ¥æä¸ªå¼å¸¸çç±»åãè¿ç§éæ±çéç¨è§£å³æ¹æ³å¦ä¸ã
åè StackOverflow ä¸å ³äºâWhat's a good way to extend Error in JavaScript?âç讨论ã
ES6 èªå®ä¹é误类è¦åï¼ Babel 7 ä¹åççæ¬å¯ä»¥å¤ç CustomError
ç±»æ¹æ³ï¼ä½ç±»æ¹æ³éè¦ä½¿ç¨ Object.defineProperty() å®ä¹ãå¦åï¼æ§çæ¬ç Babel åå
¶ä»è½¬è¯å¨å¨æ²¡æé¢å¤é
ç½®çæ
åµä¸å°æ æ³æ£ç¡®å¤çä¸é¢ç代ç ã
夿³¨ï¼ å¨ä½¿ç¨ ES2015 çç±»æ¶ï¼ä¸äºæµè§å¨ä¼å¨å æ è·è¸ªä¸å
å« CustomError
æé 彿°ã
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);
}
this.name = "CustomError";
// Custom debugging information
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
}
ES5 èªå®ä¹é误对象
è¦åï¼ å¨ä½¿ç¨ååå£°ææ¶ï¼æææµè§å¨é½ä¼å¨å æ è·è¸ªä¸å
å« CustomError
çæé 彿°ã
function CustomError(foo, message, fileName, lineNumber) {
var instance = new Error(message, fileName, lineNumber);
instance.foo = foo;
Object.setPrototypeOf(instance, CustomError.prototype);
if (Error.captureStackTrace) {
Error.captureStackTrace(instance, CustomError);
}
return instance;
}
Object.setPrototypeOf(CustomError.prototype, Error.prototype);
Object.setPrototypeOf(CustomError, Error);
CustomError.prototype.name = "CustomError";
try {
throw new CustomError("baz", "bazMessage");
} catch (e) {
console.error(e.name); // CustomError
console.error(e.foo); // baz
console.error(e.message); // bazMessage
}
è§è æµè§å¨å
¼å®¹æ§ åè§
core-js
䏿ä¾äºå
·æç°ä»£è¡ä¸ºï¼å¦ï¼æ¯æ cause
ï¼ç Error
ç polyfillthrow
try...catch
Error.captureStackTrace()
ãError.stackTraceLimit
å Error.prepareStackTrace()
ç V8 ææ¡£ã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