起こす
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
}