TIL-010 | JavaScript_Type checking

Lee, Chankyu·2021년 9월 15일
0
post-thumbnail

1. Type Checking의 필요성

  • 자바스크립트는 동적 타입 언어이기 때문에 변수에 어떤 타입의 데이터가 할당될지 예상하기 어렵고 객체의 유형은 항상 유동적으로 변할 수 있다.
function sum(a , b) {
  return a + b 
}

console.log(sum(2, 3)) // 5
console.log(sum("2", "3")) // "23"
  • 위에 작성한 코드에 따라 결과값의 차이가 발생한 이유는 변수나 반환값의 타입을 사전에 지정하지 않는 자바스크립트의 동적 타이핑(Dynamic Typing)에 의한 것이기 때문이다. 따라서 자바스크립트는 타입 체크가 필요하다.

2. Type Checking 방법

1. typeof 연산자
변수에 담겨있는 객체의 Type을 String 값으로 반환해준다.

typeof '';              // string
typeof 1;               // number
typeof NaN;             // number
typeof true;            // boolean
typeof [];              // object
typeof {};              // object
typeof new String();    // object
typeof new Date();      // object
typeof /test/gi;        // object
typeof function () {};  // function
typeof undefined;       // undefined
typeof null;            // object (설계적 결함)
typeof undeclared;      // undefined (설계적 결함)

출처 : https://poiemaweb.com/js-type-check

  • typeof 연산자는 Object의 종류를(ex.object와 array) 구분하지는 못한다.

2. Object.prototype.toString 메소드

  • Object.prototype.toString 메소드는 모든 값의 타입을 알 수 있다.
Object.prototype.toString.call('');             // [object String]
Object.prototype.toString.call(new String());   // [object String]
Object.prototype.toString.call(3);              // [object Number]
Object.prototype.toString.call(new Number());   // [object Number]
Object.prototype.toString.call(NaN);            // [object Number]
Object.prototype.toString.call(Infinity);       // [object Number]
Object.prototype.toString.call(true);           // [object Boolean]
Object.prototype.toString.call(undefined);      // [object Undefined]
Object.prototype.toString.call();               // [object Undefined]
Object.prototype.toString.call(null);           // [object Null]
Object.prototype.toString.call([]);             // [object Array]
Object.prototype.toString.call({});             // [object Object]
Object.prototype.toString.call(new Date());     // [object Date]
Object.prototype.toString.call(Math);           // [object Math]
Object.prototype.toString.call(/test/i);        // [object RegExp]
Object.prototype.toString.call(function () {}); // [object Function]

출처 : https://poiemaweb.com/js-type-check

profile
Backend Developer - "Growth itself contains the germ of happiness"

0개의 댓글