try...catch
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æ.
try...catch æã¯ try ãããã¯ã¨ãcatch ãããã¯ã finally ãããã¯ãããã®ä¸¡æ¹ããæ§æããã¾ããã¾ã try ãããã¯å
ã®ã³ã¼ããå®è¡ãããããã§ä¾å¤ãçºçããã¨ãcatch ãããã¯å
ã®ã³ã¼ããå®è¡ããã¾ããfinally ãããã¯å
ã®ã³ã¼ãã¯ãå¶å¾¡ããæµããæ§é å
¨ä½ãæããåã«ã常ã«å®è¡ããã¾ãã
試ãã¦ã¿ã¾ããã
try {
nonExistentFunction();
} catch (error) {
console.error(error);
// äºæ³ãããçµæ: ReferenceError: nonExistentFunction is not defined
// ï¼æ³¨ï¼æ£ç¢ºãªåºåã¯ãã©ã¦ã¶ã¼ã«ãã£ã¦ç°ãªãå ´åãããã¾ãï¼
}
æ§æ
try {
tryStatements
} catch (exceptionVar) {
catchStatements
} finally {
finallyStatements
}
tryStatements-
å®è¡ãããæã§ãã
catchStatements-
tryãããã¯ã®ä¸ã§ä¾å¤ãçºçããå ´åã«å®è¡ãããæã§ãã exceptionVarçç¥å¯-
é¢é£ãã
catchãããã¯ãææããä¾å¤ãä¿æããããã®ãªãã·ã§ã³ã®èå¥åã§ããããcatchãããã¯ãä¾å¤ã®å¤ãå©ç¨ããªãå ´åã¯ãexceptionVarã¨ãã®å¨ãã®æ¬å¼§ãçç¥ãã¦catch {...}ã®ããã«ãããã¨ãã§ãã¾ãã finallyStatements-
try...catch...finallyæ§é ããå¶å¾¡ããã¼ãè±åºããåã«å®è¡ãããæã§ãããããã®æã¯ãä¾å¤ãçºçããããææãããããããã©ããã«é¢ä¿ãªãå®è¡ããã¾ãã
解説
try æã¯ã常㫠try ãããã¯ããå§ã¾ãã¾ãããããããcatch ãããã¯ã¾ã㯠finally ãããã¯ãåå¨ããå¿
è¦ãããã¾ããcatch ããã³ finally ãããã¯ã両æ¹åå¨ãã¦ãæ§ãã¾ãããããªãã¡ãtry æã«ã¯ 3 ã¤ã®å½¢æ
ãããã¾ãã
try...catchtry...finallytry...catch...finally
if ã for ãªã©ã®ä»ã®æ§é ã¨ã¯ç°ãªããtryãcatchãfinally ã®åãããã¯ã¯åä¸ã®æã§ã¯ãªãããããã¯ã§ãªããã°ãªãã¾ããã
try doSomething(); // SyntaxError
catch (e) console.log(e);
catch ãããã¯ã¯ãä¾å¤ã try ãããã¯ã®ä¸ã§çºçããå ´åã«ä½ãããããæå®ããæãå«ã¿ã¾ããtry ãããã¯å
ï¼ã¾ã㯠try ãããã¯å
ããå¼ã³åºããã颿°ã®ä¸ï¼ã®ããããã®æã§ä¾å¤ãçºçããå ´åã¯ãå¶å¾¡ã¯å³åº§ã« catch ãããã¯ã¸ç§»ãã¾ããtry ãããã¯ã®ä¸ã§ä¾å¤ãçºçããªãã£ãå ´åã¯ãcatch ãããã¯ã¯é£ã°ããã¾ãã
finally ãããã¯ã¯ãå¶å¾¡ããã¼ã try...catch...finally æ§é ããè±åºããåã«å¸¸ã«å®è¡ããã¾ããããã¯å¸¸ã«å®è¡ãããä¾å¤ãçºçãããã©ãããææããããã©ããã«ã¯é¢ä¿ããã¾ããã
1 ã¤ä»¥ä¸ã® try æãå
¥ãåã«ããäºãã§ãã¾ããå
å´ã® try æã catch ãããã¯ãæã£ã¦ããªãå ´åããããå²ãã§ãã try æã® catch ãããã¯ã«å
¥ãã¾ãã
try ã使ç¨ã㦠JavaScript ã®ä¾å¤ãå¦çãããã¨ãã§ãã¾ãã JavaScript ã®ä¾å¤ã«é¢ããæ
å ±ã¯ JavaScript ã¬ã¤ããåç
§ãã¦ãã ããã
catch ã®ãã¤ã³ã
try ãããã¯å
ã§ä¾å¤ãçºçããå ´åãexceptionVarï¼ã¤ã¾ã catch (e) ã® eï¼ãä¾å¤å¤ãä¿æãã¾ãããã®ãã¤ã³ãã使ç¨ãã¦ãçºçããä¾å¤ã«é¢ããæ
å ±ãåå¾ã§ãã¾ãããã®ãã¤ã³ã㯠catch ãããã¯ã®ã¹ã³ã¼ãå
ã§ã®ã¿å©ç¨å¯è½ã§ãã
åä¸ã®èå¥åã§ããå¿ è¦ã¯ããã¾ãããè¤æ°ã®èå¥åãä¸åº¦ã«ä»£å ¥ããã«ã¯ãæ§é åè§£ãã¿ã¼ã³ã使ç¨ã§ãã¾ãã
try {
throw new TypeError("oops");
} catch ({ name, message }) {
console.log(name); // "TypeError"
console.log(message); // "oops"
}
catch ç¯ã«ãã£ã¦ä½æããããã¤ã³ã㯠catch ãããã¯ã¨åãã¹ã³ã¼ãã«åå¨ãããããcatch ãããã¯å
ã§å®£è¨ããã夿°ã¯ catch ç¯ã«ãã£ã¦ä½æããããã¤ã³ãã¨åãååãæã¤ãã¨ã¯ã§ãã¾ãããï¼ãã®è¦åã«ã¯ 1 ã¤ã®ä¾å¤ãããã¾ãããã ãããã¯éæ¨å¥¨ã®æ§æã§ããï¼
try {
throw new TypeError("oops");
} catch ({ name, message }) {
var name; // SyntaxError: Identifier 'name' has already been declared
let message; // SyntaxError: Identifier 'message' has already been declared
}
ä¾å¤ãã¤ã³ãã¯æ¸ãè¾¼ã¿å¯è½ã§ããä¾ãã°ãä¾å¤å¤ãæ£è¦åãã¦ãããã Error ãªãã¸ã§ã¯ãã§ãããã¨ãä¿è¨¼ãããå ´åãããã¾ãã
try {
throw "ãã£ã¨ããã㯠Error ãªãã¸ã§ã¯ãã§ã¯ããã¾ãã";
} catch (e) {
if (!(e instanceof Error)) {
e = new Error(e);
}
console.error(e.message);
}
ä¾å¤å¤ãå¿ è¦ãªãå ´åã¯ãå²ãæ¬å¼§ã¨ã¨ãã«çç¥ã§ãã¾ãã
function isValidJSON(text) {
try {
JSON.parse(text);
return true;
} catch {
return false;
}
}
finally ãããã¯
finally ãããã¯ã«ã¯ãtry ãããã¯ããã³ catch ãããã¯ãå®è¡ããå¾ã§ãtry...catch...finally ã®æ¬¡ã®æãå®è¡ãããåã«å®è¡ãããæãå
¥ãã¾ããå¶å¾¡ããã¼ã¯ä»¥ä¸ã®ããããã®å ´é¢ã§ã常㫠finally ãããã¯ã«å
¥ãã¾ãã
tryãããã¯ãæ£å¸¸ã«ï¼ä¾å¤ãçºçããã«ï¼çµäºããç´å¾catchãããã¯ã®å®è¡ãæ£å¸¸ã«çµäºããç´å¾- ãããã¯ãåºãå¶å¾¡ããã¼æï¼
returnãthrowãbreakãcontinueï¼ãtryãããã¯ãcatchãããã¯ã®ä¸ã§å®è¡ãããç´å
ãªããfinally ãããã¯ã¯ä¾å¤ãçºçãããã©ããã«ãããããå®è¡ããã¾ããã¾ããä¾å¤ãçºçããå ´åãfinally ãããã¯ã¯ä¾å¤ãå¦çãã catch ãããã¯ããªãã¦ãå®è¡ããã¾ãã
次ã®ä¾ã§ã¯ finally ãããã¯ã®ä¸ã¤ã®ä½¿ç¨ä¾ã示ãã¾ãããã®ã³ã¼ãã¯ãã¡ã¤ã«ãéãããããããã¡ã¤ã«ã使ç¨ããåãå®è¡ãã¾ããfinally ãããã¯ã¯ãä¾å¤ãçºçããã¨ãã¦ããã®å¾ã§ç¢ºå®ã«ãã¡ã¤ã«ãéããããä¿è¨¼ãã¾ãã
openMyFile();
try {
// ãªã½ã¼ã¹ãçµã³ä»ãã¾ã
writeMyFile(theData);
} finally {
closeMyFile(); // ãªã½ã¼ã¹ã常ã«éãã¾ã
}
å¶å¾¡ããã¼æï¼return, throw, break, continueï¼ã finally ãããã¯å
ã§ä½¿ãã¨ãtry ãããã¯ã catch ãããã¯ã®å®äºå¤ãããã¹ã¯ããã¾ãããã®ä¾ã§ã¯ãtry ãããã¯ã¯ 1 ãè¿ããã¨ãã¾ãããè¿ãåã«ã¾ã finally ãããã¯ã«å¶å¾¡ãå§ããã®ã§ã代ããã« finally ãããã¯ã®è¿å¤ãè¿ããã¾ãã
function doIt() {
try {
return 1;
} finally {
return 2;
}
}
doIt(); // returns 2
ä¸è¬ã«ãfinally ãããã¯ã®ä¸ã«å¶å¾¡ããã¼æãç½®ãã®ã¯æªãèãã§ããã¯ãªã¼ã³ã¢ããã®ããã®ã³ã¼ãã®ã¿ã使ç¨ãã¦ãã ããã
ä¾
>æ¡ä»¶ãªã catch ãããã¯
catch ãããã¯ã使ããã¦ããå ´åãtry ãããã¯ã®ä¸ããä»»æã®ä¾å¤ãçºçããã¨ãcatch ãããã¯ãå®è¡ããã¾ããä¾ãã°ã以ä¸ã®ã³ã¼ãã§ä¾å¤ãçºçããã¨ãå¶å¾¡ã¯ catch ãããã¯ã¸ç§»åãã¾ãã
try {
throw new Error("My exception"); // ä¾å¤ãçæ
} catch (e) {
// ä»»æã®ä¾å¤ãæä½ããããã®æ
logMyErrors(e); // ã¨ã©ã¼ãã³ãã©ã¼ã«ä¾å¤ãªãã¸ã§ã¯ããæ¸¡ãã¾ã
}
catch ãããã¯ã¯ä¾å¤ã®å¤ãä¿æããèå¥åï¼ä¸è¨ã®ä¾ã§ã¯ eï¼ãæå®ãã¾ãããã®å¤ã¯ catch ãããã¯ã®ã¹ã³ã¼ãå
ã§ã®ã¿å©ç¨ã§ãã¾ãã
æ¡ä»¶ä»ã catch ãããã¯
ãæ¡ä»¶ä»ã catch ãããã¯ãã¯ãä¸è¨ã®ããã« try...catch ãããã¯ã if...else if...else æ§é ã¨çµã¿åããããã¨ã§ä½æãããã¨ãã§ãã¾ãã
try {
myroutine(); // 3 ã¤ã®ä¾å¤ãçºçããå¯è½æ§ãããã¾ã
} catch (e) {
if (e instanceof TypeError) {
// TypeError ä¾å¤ãå¦çããããã®æ
} else if (e instanceof RangeError) {
// RangeError ä¾å¤ãå¦çããããã®æ
} else if (e instanceof EvalError) {
// EvalError ä¾å¤ãå¦çããããã®æ
} else {
// ä»»æã®æå®ããã¦ããªãä¾å¤ãæä½ããããã®æ
logMyErrors(e); // ã¨ã©ã¼ãã³ãã©ã¼ã«ä¾å¤ãªãã¸ã§ã¯ããæ¸¡ã
}
}
ãããã使ç¨ä¾ã¨ãã¦ã¯ã次ã®ããã«æ³å®æ¸ã¿ã®ä¸é¨ã®ã¨ã©ã¼ã®ã¿ãææï¼ããã³ç¡è¦ï¼ãããã以å¤ã®å ´åã¯ã¨ã©ã¼ãéåºãç´ãå ´åã§ãã
try {
myRoutine();
} catch (e) {
if (e instanceof RangeError) {
// é »çºããæ³å®æ¸ã¿ã®ã¨ã©ã¼ãå¦çããæ
} else {
throw e; // ã¨ã©ã¼ã夿´ããªãã¾ã¾éåºãç´ã
}
}
ãã㯠Java ãªã©ã®ä»ã®è¨èªã®æ§æã模å£ãã¦ããã®ããããã¾ããã
try {
myRoutine();
} catch (RangeError e) {
// é »çºããæ³å®æ¸ã¿ã®ã¨ã©ã¼ãå¦çããæ
}
// ãã®ä»ã®ã¨ã©ã¼ã¯æé»çã«æãç´ããã
å ¥ãåã«ãªã£ã try ãããã¯
æåã«ã次ã®ãã®ã§ä½ãèµ·ãããè¦ã¦ã¿ã¾ãããã
try {
try {
throw new Error("oops");
} finally {
console.log("finally");
}
} catch (ex) {
console.error("outer", ex.message);
}
// ãã°:
// "finally"
// "outer" "oops"
ããã§ãæ¢ã«å
é¨ã® try ãããã¯ã« catch ãããã¯ã追å ãã¦ããã®ã§ãæ¢ã«ä¾å¤ãææãã¦ãã¾ãã
try {
try {
throw new Error("oops");
} catch (ex) {
console.error("inner", ex.message);
} finally {
console.log("finally");
}
} catch (ex) {
console.error("outer", ex.message);
}
// ãã°:
// "inner" "oops"
// "finally"
ããã¦ãã¨ã©ã¼ãéããªããã¾ãã
try {
try {
throw new Error("oops");
} catch (ex) {
console.error("inner", ex.message);
throw ex;
} finally {
console.log("finally");
}
} catch (ex) {
console.error("outer", ex.message);
}
// ãã°:
// "inner" "oops"
// "finally"
// "outer" "oops"
éãç´ãããªãéããä¾å¤ã¯ã©ãã§ãæãå
å´ã® catch ãããã¯ã§ä¸åº¦ã ãææããã¾ãããã¡ãããä½ããã®ä¾å¤ããå
å´ã®ãã®ãããã¯ã§çºçããå ´åï¼catch ãããã¯ã®ã³ã¼ãã§ä¾å¤ãçºçãããã¨ãè¡ã£ãå ´åï¼ããå¤å´ã®ããããã¯ã§ææããã¾ãã
finally ãããã¯ããã® return
finally ãããã¯ãå¤ãè¿ããå ´åã try ãããã¯ã catch ãããã¯ã® return æã«é¢ä¿ãªãããã®å¤ã try-catch-finally å
¨ä½ã®è¿å¤ã«ãªãã¾ãã
ãã㯠catch ãããã¯å
ã§ä¾å¤ãçºçããå ´åãå«ã¾ãã¾ãã
(() => {
try {
try {
throw new Error("oops");
} catch (ex) {
console.error("inner", ex.message);
throw ex;
} finally {
console.log("finally");
return;
}
} catch (ex) {
console.error("outer", ex.message);
}
})();
// ãã°:
// "inner" "oops"
// "finally"
å¤å´ã® "oops" 㯠finally ãããã¯ã« return ãããããéåºããã¾ãããåããã¨ããcatch ãããã¯ããè¿ããã¦ãããã®ä»ã®å¤ã«ãé©ç¨ããã¾ãã
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-try-statement> |