throw
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æ.
throw æã¯ãã¦ã¼ã¶ã¼å®ç¾©ã®ä¾å¤ãçºçããã¾ããç¾å¨ã®é¢æ°ã®å®è¡ã忢ãï¼throw ã®å¾ã®æã¯å®è¡ããã¾ããï¼ãã³ã¼ã«ã¹ã¿ãã¯å
ã®æåã® catch ãããã¯ã«å¶å¾¡ãç§»ãã¾ããå¼ã³åºãå
ã®é¢æ°ã« catch ãããã¯ãåå¨ããªãå ´åã¯ãããã°ã©ã ãçµäºãã¾ãã
試ãã¦ã¿ã¾ããã
function getRectArea(width, height) {
if (isNaN(width) || isNaN(height)) {
throw new Error("弿°ãæ°å¤ã§ã¯ããã¾ãã!");
}
}
try {
getRectArea(3, "A");
} catch (e) {
console.error(e);
// äºæ³ãããçµæ: Error: 弿°ãæ°å¤ã§ã¯ããã¾ãã!
}
æ§æ
throw expression;
expression-
çºçãããä¾å¤ã®å¼ã§ãã
解説
throw æã¯ãæã使ç¨ã§ãããã¹ã¦ã®ã³ã³ããã¹ãã§æå¹ã§ãããã®å®è¡ã«ããä¾å¤ãçæãããã³ã¼ã«ã¹ã¿ãã¯ãé¡ã£ã¦ä¼æãã¾ããã¨ã©ã¼ã®ä¼æã¨å¦çã®è©³ç´°ã«ã¤ãã¦ã¯ãå¶å¾¡ããã¼ã¨ã¨ã©ã¼å¦çãåç
§ãã¦ãã ããã
throw ãã¼ã¯ã¼ãã®æ¬¡ã®å¼ã¯ãä¸è¨ã®ããã«ãããã種é¡ã®å¼ãç¶ãããã¨ãã§ãã¾ãã
throw error; // ï¼catch ãããã¯ã®ä¸ãªã©ã§ï¼ååå®ç¾©ãããå¤ãæãã
throw new Error("Required"); // æ°ãã Error ãªãã¸ã§ã¯ããæãã
å®éã«ã¯ãæããããä¾å¤ã¯å¸¸ã« Error ãªãã¸ã§ã¯ããã¾ã㯠RangeError ã®ãã㪠Error ã®ãµãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã§ããã¹ãã§ããããã¯ãä¾å¤ãææããã³ã¼ãããææãããå¤ã« message ãªã©ã®ç¹å®ã®ããããã£ãåå¨ãããã¨ãæå¾
ããå¯è½æ§ãããããã§ããä¾ãã°ãWeb API ã¯é常ãError.prototype ãç¶æ¿ãã DOMException ã¤ã³ã¹ã¿ã³ã¹ãæãã¾ãã
èªåã»ãã³ãã³æ¿å ¥
æ§æä¸ã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: Can only add numbers
}
æ¢åã®ãªãã¸ã§ã¯ããæãã
ãã®ä¾ã¯ã³ã¼ã«ããã¯ãã¼ã¹ã®éåæé¢æ°ãå¼ã³åºããã³ã¼ã«ããã¯ãã¨ã©ã¼ãåãåã£ãå ´åã«ä¾å¤ãçºçããã¾ãã
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);
}
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-throw-statement> |