はじまり

リサちゃん
ぐぐぐ・・・! Errorってどうやって判別するんだ・・・?

135ml
お、JavaScriptか。Error判定する方法、知りたい?

リサちゃん
知りたい知りたい! ヨロシク!
今回のソース
最終的にできたソースはこちらになります。
/**
* @param {Error} error
* @return {boolean}
*/
function isErrorType(error){
const objectTypeInfo = Object.prototype.toString.call(error);
if(objectTypeInfo.indexOf("Error") === -1){
return false;
}
return true;
}
Object.prototype.toString.call(error)
を呼び出したときの返り値は、Errorオブジェクトだった場合、以下のように出力されます。
console.log(Object.prototype.toString.call(error));
// [object Error]
そして、Object.prototype.toString.call(error).indexOf("Error")
で、文字列の中に「Error」があれば、渡したオブジェクトはErrorタイプとなるわけです。
例えば、TypeError
オブジェクトを渡すとtrueになります。
/**
* @param {Error} error
* @return {boolean}
*/
function isErrorType(error){
const objectTypeInfo = Object.prototype.toString.call(error);
if(objectTypeInfo.indexOf("Error") === -1){
return false;
}
return true;
}
try{
throw new TypeError("testtesttest");
}catch(error){
const actual = isErrorType(error);
console.log(actual);
}
// true
単にTypeError
と書いて渡しても、Errorオブジェクトにならないので、テストコードなどを書く時はその点を留意しましょう。
/**
* @param {Error} error
* @return {boolean}
*/
function isErrorType(error){
const objectTypeInfo = Object.prototype.toString.call(error);
if(objectTypeInfo.indexOf("Error") === -1){
return false;
}
return true;
}
const actual = isErrorType(TypeError);
console.log(actual);
// false
おしまい

リサちゃん
これでErrorかどうかを判定できるね〜
以上になります!
コメント