Skip to content
← Back to rules

unicorn/no-instanceof-builtins 의심스러움

An auto-fix is available for this rule.

작동 방식

ECMAScript 내장 생성자와 함께 instanceof를 사용하는 것을 금지합니다. 왜냐하면:

  • 실행 컨텍스트 간에 깨지기 때문 (iframe, 웹 워커, 노드 vm 등);
  • 종종 오해를 초래하기 때문 (예: 서브클래스에서는 instanceof Array가 실패함);
  • 항상 더 명확하고 안전한 대안이 존재하기 때문 (Array.isArray, typeof, Buffer.isBuffer, …).

왜 나쁜가?

instanceof는 실행 컨텍스트 간에 깨지며(예: iframe, 웹 워커, 노드 vm), 서브클래스나 특수 객체에 대해 잘못된 결과를 줄 수 있습니다.

예시

이 규칙에 대한 잘못된 코드 예시:

javascript
if (arr instanceof Array) { … }
if (el instanceof HTMLElement) { … }

이 규칙에 대한 올바른 코드 예시:

javascript
if (Array.isArray(arr)) { … }
if (el?.nodeType === 1) { … }

구성

이 규칙은 다음 속성을 가진 구성 객체를 수용합니다.

exclude

type: string[]

기본값: []

검사에서 제외할 생성자 이름 목록입니다.

include

type: string[]

기본 설정 외에 추가로 검사할 생성자 이름 목록입니다. 이 옵션을 사용하여 규칙을 추가 생성자로 확장할 수 있습니다.

strategy

type: "strict" | "loose"

기본값: "loose"

어떤 내장 생성자를 검사할지 조절합니다.

  • "loose" (기본값): Array, Function, Error(만약 useErrorIsError가 참일 경우), 그리고 원시 타입 래퍼만 검사
  • "strict": Error 유형, 컬렉션, 타입화된 배열, 기타 내장 생성자도 추가로 검사

useErrorIsError

type: boolean

기본값: false

true로 설정 시 instanceof Error를 검사하고, 대신 Error.isError()를 사용하도록 권고합니다. 이 기능을 사용하려면 전역 함수 Error.isError()가 사용 가능해야 합니다.

사용 방법

이 규칙을 활성화하려면 구성 파일이나 명령줄 인터페이스를 통해 다음과 같이 사용할 수 있습니다:

json
{
  "rules": {
    "unicorn/no-instanceof-builtins": "error"
  }
}
bash
oxlint --deny unicorn/no-instanceof-builtins

참고 자료