자바 스크립트는 동적 타입 (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 |