[解決済み】JSでtypeofエラーをチェックする。
2022-04-05 17:02:25
質問
JSでは、関数に渡された引数が実際に「error」型であるか、「Error」のインスタンスであるかを確認することはできないようです。
例えば、こんなのは無効です。
typeof err === 'error'
というのは、(文字列の形で)可能な型は6つしかないからです。
typeof演算子は、型情報を文字列として返す。が取り得る値は6つです。
typeof
が返される。
数値、文字列、ブーリアン、オブジェクト、関数、および未定義です。
しかし、こんな単純な使用例があったらどうでしょう。
function errorHandler(err) {
if (typeof err === 'error') {
throw err;
}
else {
console.error('Unexpectedly, no error was passed to error handler. But here is the message:',err);
}
}
では、引数がErrorのインスタンスであるかどうかを判断する最良の方法は何でしょうか?
は
instanceof
演算子は、何か役に立ちましたか?
解決方法は?
を使用することができます。
instanceof
演算子を使うことができます(ただし、以下の注意点を参照してください!)。
var myError = new Error('foo');
myError instanceof Error // true
var myString = "Whatever";
myString instanceof Error // false
上記は、チェックが行われている場所とは別のウィンドウ/フレーム/イフフレームでエラーが発生した場合には機能しません。その場合は
instanceof Error
の場合であっても、チェックはfalseを返します。
Error
オブジェクトを作成します。その場合、最も簡単な方法はダックタイピングです。
if (myError && myError.stack && myError.message) {
// it's an error, probably
}
しかし、ダックタイピングは、非エラーオブジェクトが、以下のものを含む場合、誤検出を引き起こす可能性があります。
stack
と
message
プロパティを使用します。
関連
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] typeof !== "undefined" vs. != null
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】JavaScriptのisset()に相当するもの
-
[解決済み】JavaScriptのgetElementByNameが機能しない
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?
-
[解決済み] [Solved] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングする
-
[解決済み】react router v^4.0.0 Uncaught TypeError: 未定義のプロパティ'location'を読み取れない