ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 묵혔다가 꺼낸 JS - 특수한 값들(undefined, null, NaN, Infinity)
    JS 2021. 9. 2. 22:29

    undefined와 null

    둘이 얼핏보면 비슷하지만 undefined와 null은 서로 다르다는 결론을 앞서 말하겠다.

    그럼 undefined와 null이 왜 다른지 다시 한번 정의를 알아보자

     

    undefined는 코드 작성시 변수에 특정 값이 "아직" 할당이 되지않은 상태를 뜻함

    undefined값을 선언하기 전의 상태에 들어있는 것.

     

    null은 변수에 "빈 값"이 할당되어있는 상태를 뜻한다.

    null이전의 선언된 변수에 들어있는 값을 빈 상태로 만드는 것이라고 생각이된다.

     

    실제 코드로도 둘은 다름을 뜻한다.

     

     

    undefined 와 null을 비교했을 때 둘은 다름을 의미한다.

    typeof를 통한 타입 체크에서도 확실히 a, b에는 전혀 다른 타입이 정의되어있음을 확인 할 수 있다.

    참고로 이전 포스팅에서 null은 object 타입이 도출되는 것을 설명하였을 것이다.

    (Null타입으로 결과를 도출하는 설명은 생략한다.)

     

    NaN (Not a Number)

    NaN값은 말 그대로 숫자가 아니라는 의미이다.

    예를 들어  120 * 안녕하세요 = ?

    결과 값을 당연히 숫자로 표현 할 수 없을 것이다. 이를 표현하기 위한 대체 수단이 NaN이라는 값이다.

     

    하지만 NaN은 typeof로 타입을 추론해보면 다음과 같은 결과가 나온다.

     

     

    분명히 숫자가 아닐텐데 숫자의 타입을 그대로 가지고있다. 무언가가 모순이 되는 느낌이든다.

    NaN은 분명히 숫자가 아니라는 의미를 가지고있지만, js에서 정수와 실수의 연산에 실패한 값을 넘겨주기 때문에 number의 타입을 그대로 가지고있다 생각하면 편할것이다.

     

    NaN의 두번째 특징으로는 두 NaN값을 비교하면 그 결과는 false의 결과가 나온다.

     

     

    자기 자신과 동일하지 않다는 결과를 볼 때 NaN은 정말로 이상한 특징을 가지고있는 것 같다.

     

    그렇다면 NaN 체크는 어떻게 할 것인가.

    Number.isNaN() 메소드를 사용해서 NaN의 참/거짓여부를 알 수 있다.

     

     

    마지막의 'abc'는 확실히 숫자가 아니라서 숫자로 표현하면 NaN이라는 값을 출력해 isNaN에 true를 리턴 할 것 같지만 이는 number타입 대상으로만 측정하므로 string타입은 제외된다.

     

    * 참고로 js의 기본 내장 isNaN은 숫자가 아닌 타입에도 NaN이라는 값을 인식하는 이슈가 있어, 숫자대상만으로만 측정하는 Number.isNaN()을 사용하는 것이 정신건강에 좋을 것이다.

     

    Infinity(무한대)

    Infinity에는 두가지가 존재한다. 양의 무한대, 음의 무한대 이렇게 2가지.

     

     

    Number 클래스에 명시되어있는 Number.POSITIVE_INFINITY와 Number.NEGATIVE_INFINITY가 그 값이다.

     

    단순한 궁금증이지만 Infinity / Infinity 의 결과는 NaN이 도출되었다.

    -Infinity / (-)Infinity도 결과값으로는 NaN이 나온다.

     

     

    이는 일반 수학책에서 배운것과는 달리 js는 부동소수점을 이용한 연산방식(궁금하다면 IEEE 754를 검색해보자.)을 채택하였으므로 무한대의 영역에서도 양과 음이 존재하고있다고 설명되어있다.

    + 심심하니 자바스크립트 친구 자바에서도 똑같이 양과 음의 무한대를 가지는 결과를 나타낸다.

     

     

    댓글

oct_sky_out