| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
Tags
- CodeIgniter
- 헬퍼
- jquery
- html
- APK
- 코드이그나이터
- 옵션표
- php
- javascript
- 후크
- 함수
- 안드로이드
- rairen
- 웹 프로그래밍
- Database
- mysql
- phpDocumentor
- CI3
- config
- codeigniter3
- 영카트
- 라이렌
- API
- 그누보드
- 설정
- json
- function
- jw player
- FCM
- 웹개발
Archives
- Today
- Total
프로그램 개발서
JavaScript Error.isError()로 다른 실행 환경의 오류 객체 판별하기 본문

문제와 사용 상황
typeof error === "error"는 동작하지 않고 instanceof Error는 iframe, worker, Node.js vm처럼 다른 realm에서 만들어진 오류에 false가 될 수 있습니다. Error.isError()는 실제 Error 계열을 Boolean으로 판별하는 정적 메서드입니다.
테스트 환경·버전·날짜
2026-08-07 KST에 Node.js v24.14.0에서 node:vm cross-realm 오류와 일반 객체·null·문자열을 검사했습니다. Node.js v23.11.1에서는 API 미지원 상태를 확인해 기능 감지 경로만 기록했습니다.
최소 재현 코드
const nativeError = new Error("database timeout");
console.log(Error.isError(nativeError)); // true
console.log(Error.isError({
name: "Error",
message: "looks like an error"
})); // false
import vm from "node:vm";
const otherRealmError = vm.runInNewContext(
"new Error('created elsewhere')"
);
console.log(otherRealmError instanceof Error); // false
console.log(Error.isError(otherRealmError)); // true
테스트 케이스와 결과

| 케이스 | 실제 출력 | 결과 |
| API 지원 | function | 통과 |
| 현재 realm Error | true | 통과 |
| cross-realm Error | true | 통과 |
| TypeError | true | 통과 |
| 일반 객체·null·문자열 | false | 통과 |
Node.js v23.11.1에서는 typeof Error.isError가 undefined였으므로 기능 감지 후 대체 경로를 선택했습니다.
최종 코드
export function isErrorValue(value) {
if (typeof Error.isError === "function") {
return Error.isError(value);
}
// 구형 런타임의 제한된 대체 경로
return value instanceof Error;
}
export function normalizeError(value) {
if (!isErrorValue(value)) {
return { kind: "non-error", message: "오류 객체가 아닌 값" };
}
return { kind: "error", name: value.name, message: value.message };
}
실패 조건·브라우저·버전 차이
- 지원하지 않는 런타임에서 직접 호출하면
TypeError가 발생합니다. instanceof Error는 다른 realm의 오류에서 false가 될 수 있습니다.name·message만 검사하는 duck typing은 일반 객체를 잘못 통과시킬 수 있습니다.- Node.js v24.14.0은 지원했고 v23.11.1은 지원하지 않았습니다. 다른 브라우저 결과는 별도 확인이 필요합니다.
보안·호환성 주의사항
message, stack, cause에는 파일 경로와 사용자 입력이 포함될 수 있습니다. Error.isError()가 true여도 외부 응답에 상세 오류를 그대로 보내지 말고 일반화된 오류 코드와 제한된 로그를 사용하세요. 구형 런타임은 기능 감지 후 검토된 폴리필이나 제한된 대체 경로를 선택합니다.
직접 확인 방법
typeof Error.isError를 실행합니다.- 현재 realm Error, TypeError, null, 문자열, Error 모양의 일반 객체를 넣습니다.
- 브라우저 iframe·worker 또는 Node.js
node:vm에서 만든 Error를 확인합니다. - 미지원 런타임에서 대체 함수와 로그·응답 경계를 확인합니다.
공식 참고자료
반응형
'Javascript' 카테고리의 다른 글
| JavaScript Array.fromAsync()로 비동기 반복값을 순서대로 배열로 만들기 (0) | 2026.08.07 |
|---|---|
| JavaScript RegExp.escape()로 동적 정규식 안전하게 만들기: 점·하이픈·역참조 처리 (0) | 2026.08.01 |
| JavaScript URLSearchParams 중복 키 처리: getAll(), append(), set() 차이 (0) | 2026.07.28 |
| JavaScript JSON.parse에서 큰 정수 정밀도 손실 막기: context.source와 BigInt (0) | 2026.07.27 |
| 그누보드5 이윰빌더 시즌4 CHEditor5에 에드온 이모티콘 삽입 (0) | 2024.06.24 |