typeof란?
typeof는 피연산자의 데이터 타입을 반환하는 연산자이다. 하나의 피연산자를 오른쪽에 두며 피연산자의 원시 타입(primitive type)을 string 형태로 반환한다.
예를 들어
위와 같이 string 타입 변수를 피연산자로 받으면 'string'을 반환한다.
typeof가 반환하는 값은 다음과 같다.
- 'boolean' : 불리언
- 'number' : 숫자
- 'string' : 문자열
- 'object' : 객체
- 'function' : 함수
- 'undefined' : undefined
- 'symbol' : ES6부터 추가된 Symbol 타입
typeof를 사용하는 다양한 예시를 보자.
특이한 경우 몇 개만 짚어보겠다.
{ }는 객체기 때문에 'object'를 반환한다. 또한 배열인 [ ] 도 객체로 취급해 'object'를 반환한다.
null 값의 type은 객체로 판단해 'object'를 반환한다.
var x = null;
if(typeof x === 'object'){
// 실행됨
}
위와 같이 x가 객체일 때만 코드를 실행하려 한다고 하자. null은 object로 취급되기 때문에 위 코드는 실행되어 버린다.
따라서 의도대로 하려면 아래와 같이 코드를 작성해야 한다.
if(x != null && typeof x === 'objcet'){
// null 값 걸러짐
}
위와 같이 null 값 처리를 해줘야 한다.
instanceof란?
instanceof는 피연산자가 특정 클래스의 인스턴스인지 비교해 boolean 값(true/false)을 반환해 주는 비교연산자이다.
예를 들어
Student라는 클래스의 inst라는 인스턴스를 생성한 뒤 instanceof로 비교해 보면
inst가 Student의 인스턴스라는 것을 알 수 있다.
또한, 모든 클래스는 Object를 확장하기 때문에 inst는 Object의 인스턴스이기도 하다.
instanceof는 원시 값과의 비교는 불가능하다.
예를 들어
원시 값인 string을 String 클래스와 비교하면 false를 반환한다.
반면 new String() 생성자를 이용해 생성한 인스턴스는 true를 반환한다.
null 값은 Object의 인스턴스가 아니다. 따라서 false를 반환한다.
typeof와 intanceof의 차이
1. typeof는 피연산자의 원시 타입을 string 형태로 반환한다. 반면 intanceof는 피연산자가 특정 클래스의 인스턴스인지 판단하여 boolean 값을 반환한다.
2. typeof는 원시 타입을 비교할 수 있고, instanceof는 원시 타입을 비교할 수 없다.
3. typeof는 undefined를 비교할 수 있지만, instanceof는 비교할 수 없다.
위와 같이 정의되지 않은 변수 undefinedValue를 typeof로 비교하면 'undefined'를 반환한다.
반면 instanceof로 비교하면 에러가 발생한다.
4. null 값 처리에는 instanceof가 유리하다.
var x = null;
if(x !== null && typeof x === 'object'){
// ...
}
if(x instanceof Object){
// ...
}
개발자가 x가 객체일 경우에만 코드를 실행하고 싶다면 typeof를 사용하는 것보다
위와 같이 instanceof를 사용하는 것이 더 간단하다.
instanceof는 null 값을 Object의 인스턴스라고 판단하지 않지만 typeof는 object라고 판단하기 때문이다.
'프로그래밍 언어 > [JavaScript]' 카테고리의 다른 글
[JavaScript] 자바스크립트 옵셔널 체이닝 '?'이란? (0) | 2023.12.11 |
---|---|
[JavaScript] 자바스크립트 nullish 병합 연산자 '??'에 대하여 (0) | 2023.12.08 |
[JavaScript] 자바스크립트 null과 undefined의 차이 (0) | 2023.12.05 |
[JavaScript] var, let, const의 차이점, 호이스팅이란? (0) | 2023.12.01 |
[JavaScript] 자바스크립트(JavaScript)란? 자바스크립트의 특징, 장단점 (0) | 2023.11.01 |