2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【js】throwについて考える

Posted at

例えばこんなコード

throw new Error();

実行すると例外が出る。
使い道としては、エラーを返す代わりに例外を投げたい時に使う。

function hoge(arg) {
    if(arg <= 10) {
        console.log(arg);
    } else {
        throw new Error('10を超えてますよ');
    }
}
hoge(11)
出力
Uncaught Error: 10を超えてますよ

エラーを拾う

例外の内容が「10を超えてますよ」エラーの場合のみ実行したい処理があったとする。
その場合は多分こうなる。

try{
    hoge(11);
} catch(e) {
    if(e.message === '10を超えてますよ'){
        console.log('10オーバーエラーを取得しました。')
    }
}
出力
10オーバーエラーを取得しました。

ただこの実装はできるだけ避けたい。
※実は職場で見た実装

どうしよう

この辺を参考にしてみた

// オリジナルErrorを定義
class MyError extends Error{
  constructor(message) {
    super(message)
  }
}
try{
    hoge(11);
}catch(e){
    // 判定に「instanceof」を使う
    if(e instanceof MyError){
        console.log('10オーバーエラーを取得しました。')
    }
}
出力
10オーバーエラーを取得しました。

ちなみに

実はErrorクラス以外もthrowできる。
※ややこしくなるので絶対やらないほうがいいと思う

class MyClass {
  constructor() {}
}
try{
    hoge(11);
} catch(e) {
    if(e instanceof MyClass){
        console.log('10オーバーエラーを取得しました。')
    }
}
出力
10オーバーエラーを取得しました。

思いつたことがあったら追記します。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?