프론트 개발 블로그

자바스크립트에서 타입을 체크하는 방법 typeof 본문

Javascript

자바스크립트에서 타입을 체크하는 방법 typeof

maybe.b50 2021. 9. 28. 17:33

typeof

typeof 연산자는 피연산자의 평가 전 자료형을 나타내는 문자열을 반환한다.

console.log(typeof 42);
// output: 'number'

console.log(typeof 'text');
// output: 'string'

console.log(typeof true);
// output: 'boolean

console.log(typeof undeclaredVariable);
// output: 'undefined'

console.log(typeof {a:1});
// output: 'object'

console.log(typeof [1,2,3]);
// output: 'obejct'

console.log(typeof function() {});
// output: 'function'

 

왜 null 이 null 이 아니고 object 일까?

console.log(typeof null);
// output: 'object'

typeof null === 'object';
// true

typeof null === 'null'
// false

 

자바스크립트를 처음 구현할 때 자바스크립트 값은 타입 태그와 값으로 표시 되었다고 함. 

객체 타입 태그는 0이었고, null 은 Null pointer(대부분 플랫폼에서 0x00)로 표시되었다고 함.

그 결과 null은 타입 태그로 0을 가지며 따라서 typeof 가 object 를 반환한다고 한다.

이것은 자바스크립트 초기 버전의 버그이며, 

typeof null === 'null' 로 수정이 제안되었지만 기존의 코드가 손상될 수 있기 때문에 거절당했다고 함. 

 

https://2ality.com/2013/10/typeof-null.html

https://web.archive.org/web/20160331031419/http://wiki.ecmascript.org:80/doku.php?id=harmony:typeof_null

 

null 타입 체크 방법 

일치 연산자는 값과 타입이 동일할 때만 true 를 반환하기 때문에 일치 연산자(===)를 사용하는 것이 좋다고 한다.

var nullcheck = null;
console.log(nullcheck === null); // true

검색하다가 잘 정리된 글이 있어서 첨부

https://curryyou.tistory.com/183

 


typeof 는 object 와 array 를 구분해주지 못한다.

console.log(typeof {a:1});
// output: 'object'

console.log(typeof [1,2,3]);
// output: 'obejct'

 

obejct 와 array 를 구분하는 방법 1. Array.isArray() 

Array.isArray() 메서드는 인자가 Array 인지 판별한다.

Array.isArray([1,2,3]); // true
Array.isArray({a:1}); // false

 

obejct 와 array 를 구분하는 방법 2. constructor 속성으로 확인 

constructor 속성은 색성자 객체를 통해 생겨난 인스턴스를 알려주는 역할을 함. 

const obj = {a:1};
obj.constructor === Object // true
obj.constructor === Array // false

const arr = [1,2,3];
arr.constructor === Object // false
arr.constructor === Array // true

 

 

반응형