프론트엔드/Javascript

Javascript - instanceof

0-SIK 2024. 10. 25. 21:20
728x90

instanceof란?

instanceof는 JavaScript의 연산자로, 어떤 객체가 특정 클래스생성자 함수의 인스턴스인지 검사할 때 사용됩니다.

 

사용법

object instanceof Constructor

 

  • object: 검사할 대상(객체).
  • Constructor: 해당 객체가 속하는지 확인할 클래스(또는 생성자 함수).

주요 특징

  • 객체가 **해당 클래스(또는 생성자 함수)**로부터 생성되었거나, 프로토타입 체인에 존재하면 true를 반환합니다.
  • 주로 에러 핸들링 시, 특정 오류 객체(TypeError, JsonWebTokenError 등)를 구분하는 데 사용합니다.

코드 해석

if (error instanceof jwt.JsonWebTokenError) {
  return res.status(401).json({
    success: false,
    message: 'Not authorized - Invalid token',
  });
} else (error) {
  return res.status(500).json({
    success: false,
    message: 'Internal server error',
  });
}

 

 

  • error가 JWT 라이브러리에서 발생한 JsonWebTokenError 타입의 에러인지 검사합니다.
  • 만약 JsonWebTokenError라면, 401 (Unauthorized) 상태 코드와 함께 유효하지 않은 토큰 메시지를 반환합니다.
  • 그렇지 않은 경우, 500 (Internal Server Error) 상태 코드를 반환합니다.

왜 instanceof를 사용하는가?

  • 에러 구분: 서로 다른 에러를 구분하여 적절한 응답을 제공할 수 있습니다.
    • 예: 인증 실패(401)와 서버 내부 오류(500)를 다르게 처리.
  • 정확한 타입 확인: 객체가 기대한 타입인지 확인해 올바른 동작을 수행할 수 있도록 보장합니다.

예시

class CustomError extends Error {}
const error = new CustomError('Oops!');

console.log(error instanceof CustomError); // true
console.log(error instanceof Error); // true (CustomError는 Error의 하위 클래스)

 

 

 

  • error는 CustomError의 인스턴스이기 때문에 true가 반환됩니다.
  • 또한, CustomError는 Error를 상속받았기 때문에 Error의 인스턴스로도 인식됩니다.

결론

instanceof는 객체의 타입을 확인하여 코드의 흐름을 제어하는 데 유용하며, 특히 에러 핸들링에서 자주 사용됩니다.

 

728x90