본문 바로가기

4. Programming/4.3 JavaScript

8. 타입 체크

자바 스크립트는 동적 타입 (Dynamic typed) 언어이므로 변수에 어떤 값이 할당될 지 예측하기 어려움.


아래와 같이 숫자나 문자열이 인수로 전달되어도 결과를 반환하기 때문에, 명확하지 않아질 수 있음.


function sum(a, b){
return a + b;
}


sum('a','b');

sum(1,4);


이와 같은 이유로 자바스크립트는 타입 체크가 필요함. 타입 연산자(Type Operators)는 피연산자의 데이터 타입(자료형)을 문자열로 반환.


typeof '';              // string
typeof 1; // number
typeof NaN; // number
typeof true; // boolean
typeof []; // object
typeof {}; // object
typeof new Date(); // object
typeof /test/gi; // object
typeof function () {}; // function
typeof undefined; // undefined
typeof null; // object

 typeof는 null과 배열의 경우 Object로 객체의 종류까지 구분하여 체크하려고 할때는 사용하기 어려움.


Function.prototype.call 메소드를 사용하면 모든 타입의 값을 확인 할 수 있음.


Object.prototype.toString.call('');             // [object String]
Object.prototype.toString.call(1); // [object Number]
Object.prototype.toString.call(NaN); // [object Number]
Object.prototype.toString.call(true); // [object Boolean]
Object.prototype.toString.call([]); // [object Array]
Object.prototype.toString.call({}); // [object Object]
Object.prototype.toString.call(new Date()); // [object Date]
Object.prototype.toString.call(new String()); // [object String]
Object.prototype.toString.call(Math); // [object Math]
Object.prototype.toString.call(/test/i); // [object RegExp]
Object.prototype.toString.call(function () {}); // [object Function]
Object.prototype.toString.call(document); // [object HTMLDocument]
Object.prototype.toString.call(undefined); // [object Undefined]
Object.prototype.toString.call(); // [object Undefined]


여기에 slice(8, -1)을 사용하면 타입의 문자열만 추출할 수 있음.

Object.prototype.toString.call('').slice(8, -1);


위의 내용을 사용하여, 함수로 생성하면 타입 체크가 가능.

function typeCheck(obj){
return Object.prototype.toString.call(obj).slice(8,-1);
}

typeCheck('String'); // String



참고 : https://poiemaweb.com

'4. Programming > 4.3 JavaScript' 카테고리의 다른 글

10. Scope Life-Cycle  (0) 2018.08.15
9. 프로토타입과 객체지향  (0) 2018.08.09
7. Function (함수)  (0) 2018.07.15
6. Immutability (객체와 변경불가성)  (0) 2018.07.13
5. Object (객체)  (0) 2018.06.17