JS에서는 함수에 전달 된 인수가 실제로 'error'유형인지 또는 Error 인스턴스인지 확인할 수 없습니다.
예를 들어, 이것은 유효하지 않습니다 :
typeof err === 'error'
문자열 형식으로 가능한 유형이 6 개뿐이므로 다음과 같습니다.
typeof 연산자는 유형 정보를 문자열로 반환합니다. typeof반환되는 가능한 값은 6 가지입니다 .
"숫자", "문자열", "부울", "개체", "함수"및 "정의되지 않음".
그러나 다음과 같은 간단한 유스 케이스가 있다면 어떨까요?
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);
}
}
그렇다면 인수가 오류의 인스턴스인지 확인하는 가장 좋은 방법은 무엇입니까?
instanceof도움 의 운영자입니까?
erriframe을 던져 넣은 경우 부모 창에 전달하면 나눠 줄 것 (err instanceof Error) === false입니다. iframe과 해당 부모 창에 서로 다른 Error객체 프로토 타입 이 있기 때문 입니다. 비슷하게 obj = {};will 과 같은 객체 는 다른 창에서 실행되는 함수에 전달 될 때 yeild (obj instanceof Object)===false입니다. (심지어 최악의 경우, IE가 창을 파괴하거나 탐색 한 후에 obj에 대한 참조를 유지하면 obj.hasOwnProperty()오류가 발생하는 것과 같은 객체 프로토 타입 fns를 호출하려고하면 오류가 발생합니다!)
catch((err)=>{if (err === ENOENT)반환 ENOENT is not defined합니까?
err instanceof Error