타입 검사

자바스크립트는 동적으로 변하는 언어이므로, 타입 역시 동적으로 변한다. 따라서 타입을 체킹해주는 방식을 소홀하게 대해서는 안 된다.

typeof는 안전하지 않다

피연산자를 평가해서 그 타입을 문자열로 리턴한다.

typeof 'string'
typeof true
typeof undefined
typeof 123
typeof Symbol()

편하긴 하지만, 한계점이 있다. 참조 타입은 typeof로 분별해내기가 굉장히 어렵다.

Class의 경우

클래스 객체인데도 function으로 판별한다.

function myFunc() {}
class MyClass {}

console.log(typeof myFunc) // function
console.log(typeof MyClass) // function

Reference value의 경우

Object로 판별한다.

const str = new String('string')
console.log(typeof str) // Object

null의 경우

Object로 판별한다. 언어적인 오류가 맞다. 자바스크립트가 널리 쓰이면서 이제는 건들 수 없는 에러가 되어 버렸다고 한다.

typeof null // Object

그렇기 때문에 typeof를 맹신해서는 안 된다.

instanceof

객체의 프로토타입 체인을 검사하는 연산자이다.