throw
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
throw è¯å¥ç¨äºæåºç¨æ·èªå®ä¹çå¼å¸¸ãå½å彿°çæ§è¡å°åæ¢ï¼throw ä¹åçè¯å¥ä¸ä¼è¢«æ§è¡ï¼ï¼å¹¶ä¸æ§å¶æå°ä¼ éç»è°ç¨å æ ä¸ç¬¬ä¸ä¸ª catch åã妿è°ç¨å½æ°ä¸æ²¡æ catch åï¼åç¨åºå°ç»æ¢ã
å°è¯ä¸ä¸
function getRectArea(width, height) {
if (isNaN(width) || isNaN(height)) {
throw new Error("Parameter is not a number!");
}
}
try {
getRectArea(3, "A");
} catch (e) {
console.error(e);
// Expected output: Error: Parameter is not a number!
}
è¯æ³
throw expression;
expression-
æåºè¡¨è¾¾å¼ã
æè¿°
throw è¯å¥å¨ä»»ä½å¯ä»¥ä½¿ç¨è¯å¥çä¸ä¸æä¸é½ææãå®çæ§è¡ä¼äº§çä¸ä¸ªå¨è°ç¨å æ ä¼ æçå¼å¸¸ãæå
³éè¯¯åæ³¡åå¤ççæ´å¤ä¿¡æ¯ï¼è¯·åé
æ§å¶æµä¸é误å¤çã
throw å
³é®ååé¢å¯ä»¥è·ä»»ä½ç±»åç表达å¼ï¼ä¾å¦ï¼
throw error; // æåºä¹åå®ä¹çå¼ï¼ä¾å¦ï¼å¨ catch åä¸ï¼
throw new Error("Required"); // æåºä¸ä¸ªæ°çé误对象
å¨å®è·µä¸ï¼ä½ æåºçå¼å¸¸åºè¯¥å§ç»æ¯ Error 对象æ Error åç±»çå®ä¾ï¼ä¾å¦ RangeErrorãè¿æ¯å 为æè·é误ç代ç å¯è½æææè·çå¼å
·æä¸äºå±æ§ï¼ä¾å¦ é误信æ¯ãä¾å¦ï¼Web API éå¸¸ä¼æåº DOMException å®ä¾ï¼è¿äºå®ä¾ç»§æ¿èª Error.prototypeã
èªå¨åå·è¡¥å ¨
è¯æ³ä¸å
è®¸å¨ throw å
³é®ååè¦æåºç表达å¼ä¹é´åºç°æ¢è¡ã
throw
new Error();
ä¸é¢ç代ç ç»è¿èªå¨åå·è¡¥å ¨ï¼ASIï¼è½¬æ¢åå为ï¼
throw;
new Error();
è¿æ®µä»£ç æ æï¼å ä¸ºä¸ return è¯å¥ä¸åï¼throw è¯å¥åé¢å¿
é¡»è·ä¸ä¸ªè¡¨è¾¾å¼ã
为äºé¿å è¿ä¸ªé®é¢ï¼é²æ¢ ASIï¼ï¼å¯ä»¥ä½¿ç¨æ¬å·ï¼
throw (
new Error()
);
示ä¾
>æåºç¨æ·èªå®ä¹çé误
æ¤ç¤ºä¾å®ä¹äºä¸ä¸ªå½æ°ï¼è¯¥å½æ°å¨è¾å
¥ä¸æ¯é¢æç±»åæ¶æåº TypeError å¼å¸¸ã
function isNumeric(x) {
return ["number", "bigint"].includes(typeof x);
}
function sum(...values) {
if (!values.every(isNumeric)) {
throw new TypeError("åªè½æ·»å æ°å");
}
return values.reduce((a, b) => a + b);
}
console.log(sum(1, 2, 3)); // 6
try {
sum("1", "2");
} catch (e) {
console.error(e); // TypeErrorï¼åªè½æ·»å æ°å
}
æåºä¸ä¸ªç°æç对象
æ¤ç¤ºä¾è°ç¨äºä¸ä¸ªåºäºåè°ç弿¥å½æ°ï¼å¹¶å¨åè°æ¥æ¶å°éè¯¯æ¶æåºé误ã
readFile("foo.txt", (err, data) => {
if (err) {
throw err;
}
console.log(data);
});
éè¿è¿ç§æ¹å¼æåºçéè¯¯æ æ³è¢«è°ç¨è
æè·ï¼å¹¶ä¼å¯¼è´ç¨åºå´©æºï¼é¤éï¼ï¼aï¼readFile 彿°æ¬èº«æè·äºéè¯¯ï¼æï¼bï¼ç¨åºå¨æè·é¡¶çº§é误çä¸ä¸æä¸è¿è¡ãä½ å¯ä»¥ä½¿ç¨ Promise() æé 彿°æ´èªç¶å°å¤çé误ã
function readFilePromise(path) {
return new Promise((resolve, reject) => {
readFile(path, (err, data) => {
if (err) {
reject(err);
}
resolve(data);
});
});
}
try {
const data = await readFilePromise("foo.txt");
console.log(data);
} catch (err) {
console.error(err);
}
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-throw-statement> |