TIL: 정확하게 타입을 식별하기

Snoop So·2023년 6월 19일
0

JavaScript의 typeof는 간단한 타입 검사를 위한 도구로 좋지만, 보다 복잡한 객체 타입을 정확하게 판별하기에는 한계가 있습니다. 다행히, 표준 라이브러리 객체들의 타입을 정확하게 확인하는 몇 가지 방법이 있습니다.

  1. instanceof 연산자: instanceof는 특정 객체가 특정 생성자로부터 생성되었는지 확인하는데 사용됩니다. 예를 들어, formdata instanceof FormData라는 코드는 formdataFormData 생성자로 생성되었는지 확인하고 이에 따라 true 또는 false를 반환합니다. 하지만 이 방법은 프로토타입 체인을 기반으로 하기 때문에, 프로토타입 체인이 수정되었거나 다른 프레임에서 생성된 객체에 대해서는 정확한 결과를 보장하지 못합니다.

  2. Object.prototype.toString.call(): 이 방법은 표준 빌트인 객체의 타입을 정확하게 확인하는 가장 안전한 방법입니다. Object.prototype.toString.call(formdata)를 실행하면 "[object FormData]"와 같은 문자열을 반환합니다. 이를 통해 FormData 타입을 확인할 수 있습니다. 이 방법은 다른 프레임에서 생성된 객체에 대해서도 정확한 결과를 반환합니다.

이런 방법을 활용해, 리터럴 오브젝트와 FormData를 구분하는 함수를 작성할 수 있습니다. 예를 들면, 다음과 같이 작성할 수 있을 것입니다.

function getType(obj) {
    var toString = Object.prototype.toString.call(obj);

    if (toString === "[object Object]") {
        return "Literal Object";
    } else if (toString === "[object FormData]") {
        return "FormData";
    } else {
        return "Unknown";
    }
}

var myObj = {};  // 리터럴 오브젝트
var myFormData = new FormData();  // FormData 오브젝트

console.log(getType(myObj));  // 출력: Literal Object
console.log(getType(myFormData));  // 출력: FormData

이 함수는 obj에 전달된 오브젝트의 타입을 판별하고, 그 결과를 문자열로 반환합니다.

0개의 댓글