데이터 타입 검사 ( 원시타입과 객체타입에 따른)

    typeOf

    primitive와 reference의 차이

    • 자바스크립트는 동적인 타입임으로 타입 검사가 어렵다. 잘 찾아서 검사를 하자.

    primitive

    console.log(typeof '문자열') //string
    console.log(typeof true) //boolean
    console.log(typeof 123) //number
    console.log(typeof Symbol()) //symbol
    • typeOf로 잘 검사가 됨.

    reference

    function myFun() {}
    class MyClass{}
    const str = new String('문자열')
    
    console.log(typeof(myFun)) //function
    console.log(typeof(MyClass)) //function
    console.log(typeof(str)) //object
    • typeOf로 잘 잡아내기 어려움.

    예외 null

    console.log(typeOf(null)) // object

    instanceOf

    primitive

    function Person(name, age) {
      this.name = name;
      this.age = age;
    };
    
    const P = {
      name : 'poco',
      age : 10.
    }
    
    const poco = new Person('poco',10);
    console.log(poco instanceof Person) //true
    console.log(P instanceof Person) //false

    reference

    const arr = [];
    const func = fucnction() {};
    const date = new Date();
    
    arr instanceOf Array // true
    func instanceOf Function // true
    date instanceOF Date // true
    • 하지만 reference의 최상단은 모두 객체임으로 객체일때 다 true이다.
      arr instanceOf Object // true
      func instanceOf Object // true
      date instanceOF Object// true
      해결방안
    Object.prototype.toString.call('문자열') // '[object String]'
    Object.prototype.toString.call(arr)// '[object Array]'
    Object.prototype.toString.call(date)// '[object Date]'
    Object.prototype.toString.call(func)// '[object Function]'

    검색 방법

    javascript is array

    isNaN

    • isNaN 느슨한 검사, 숫자가 아니다 (true)/ 숫자가 숫자가 아니다 => 숫자다. (false)
    • Number.isNaN 엄격한 검사
    isNaN(123) // false
    isNaN(123 + '문자열') // true
    
    Number.isNaN(123) // true
    Number.isNaN(123 + '문자열') // false

     

    이 글은 https://www.udemy.com/course/clean-code-js 클린코드 강의를 보고 작성한 글입니다.

    댓글