起こす
throwを使うと、その部分で「何かしら変な事が起きた」ことが返せます。
throw new Error('エラーメッセージ');コメント
JDOC コメントを残すと他の人の助けになるかもです。
/**
* @throws {Error} こんなの時
*/
function foo() {
/* ... */
}起こったエラーを扱う
try-catchを使います。tryブロックにはエラーが起こりそうな処理を書きます。もし起きた時、throwされたErrorをcatchブロックの引数で受け取れます。
try {
foo();
} catch (err) {
console.log(err);
// Error: エラーメッセージ
// at Object.
// ここで扱えないなら再度 throw したり
// throw err;
} よく使うエラー
最低限Errorにだけはして返すといいと思います。
TypeError
TypeError オブジェクトは、値が期待される型でない場合のエラーを表します。 TypeError - JavaScript | MDN
引数の型などに想定外の型を渡された時などに使います。
/**
* @throws {TypeError} num が数値じゃない時
*/
const plusOne = num => {
if (typeof num !== 'number') {
throw new TypeError('数値を渡してください');
}
return num + 1;
};SyntaxError
構文的に不正なコードを解釈しようとした場合のエラーを表します。 SyntaxError - JavaScript | MDN
渡された文字列をパースする関数などで、想定外の形の文字列を渡された時などに使います。
const parse = str => {
const re = /* 正規表現 */;
if (!re.test(str)) {
throw new SyntaxError('文字列の形が不正です')
}
return Foo.parse(str);
}自分で作る
Errorクラスを継承して自分のErrorクラスを作ることができます。Error.captureStackTraceはスタックトレースから無駄を減らしてくれます。
class MyError extends Error {
constructor(message) {
super(message);
Error.captureStackTrace(this, MyError);
}
}
const foo = () => {
/* ... */
throw new MyError('エラー!!');
/* ... */
};
try {
foo();
} catch (err) {
console.log(err instanceof MyError); // true
}