[JavaScript] 숫자와 특수 값

  • 이 책은 You Don’t Know JS, 카일 심슨 저, 한빛미디어 를 공부하며 작성한 글입니다.
  • 단순히 블로그만 읽는 것은 추천하지 않습니다.

[들어가기 전]

이번 포스팅은 숫자와 특수 값에 대한 자바스크립트 엔진에서의 특이한 점들에 대해 다룬다.

궁금한 사람만 읽으시면 될 듯!

[숫자]

자바스크립트의 숫자 타입은 number가 유일하며, 정수와 부동 소수점 숫자를 모두 아우른다.

자바스크립트에서 정수는 부동 소수점 값이 없는 값이다.

즉, 42.0 === 42 으로, 자료형으로 구분하지 않는다.

또한 숫자 값은 Number 객체 래퍼로 박싱할 수 있기 때문에, Number.prototype 메서드로 접근 할 수 있다.

예를 들어보자.

let a = 17.63;
console.log(a.toFixed(0)); // 18
console.log(a.toFixed(1)); // 17.6
console.log(a.toFixed(2)); // 17.63

실제로는 숫자 값을 문자열 형태로 반환한다.

위와 같은 메소드를 사용할 때 주의해야할 점은, 숫자 리터럴에서 바로 접근할 수 있으므로 굳이 변수를 만들어 할당하지 않아도 되지만 .이 소수점인지 프로퍼티 접근자인지 잘 판단해서 사용해야 한다.

42.toFixed(3); //Syntax Error
(42).toFixed(3); // 올바른 구문
42..toFixed(3); //올바른 구문

정수에 대해서 이어서 설명을 진행하겠다.

자바스크립트는 정말 큰 수까지 표시할 수 있기 때문에, 정수는 안전 값의 범위 가 정해져 있다.

Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER 이다.

반면, 정수인지 확인하기 위해 Number.isInteger() 메소드를 통해 ES6 부터는 정수 여부를 확인할 수 있다.

[특수 값 1. Undefined, null]

Undefined 타입의 값은 Undefined 밖에 없다. null 타입 역시 값은 null뿐이다.

둘은 타입과 값이 항상 같다.

알아두면 좋은 잡지식? 인 것 같은데, undefined에는 값을 할당 할 수 있다. 저자는 절대 추천하지 않는 방식으로 강조하고 있다.

let undefined = 2;
console.log(undefined); //2

실제 브라우저 콘솔창에서는 작동하지 않더라

[특수 값 2. void]

void는 자바스크립트에서는 일반적인 프로그래밍 언어에서 사용하는 void의 의미와 다르다.

자바스크립트에서 void는 어떤 값이든 무효로 만들어 항상 결과값을 undefined 로 만든다.

let a = 50;
console.log(void a); //undefined

void 연산자는 어떤 표현식의 결과값이 없다는 걸 확실히 밝혀야 할 때 긴요하다고 한다. 아직 그런 상황을 겪어보질 않아서 잘 모르겠다..

[특수 값 3. 특수 숫자]

NaN 이란 Not A Number의 약자로서, 연산과정에서 잘못된 입력을 받았음을 나타내는 기호이다. 글자 그대로는 숫자 아님인데, 실질적으로는 유효하지 않은 숫자 , 실패한 숫자 등으로 생각해야 이해가 편하다.

왜냐하면, NaN 에 typeof 연산자를 적용시키면 Number 가 나와버림..

ES6부터는 Number.isNaN() 으로 안전하게 NaN여부를 체크할 수 있다.

[특수 값 4. 무한대]

전통적인 컴파일 언어는 어떤 값을 0으로 나눈 결과 값을 출력하려 하면, 에러가 난다.

자바스크립트는 에러 없이 Infinity 결과값이 나온다.

[특수 값 4. 영]

자바스크립트는 또한 음의 영이 존재한다…..

let a = 0 / -3;; // -0

그런데 또 특이하게, -0을 문자열화 하거나, 비교 연산 결과는 0이 나온다.

let a = 0 / -3;
a.toString(); // "0"
JSON.stringify(a); //"0"

let b = 0;
console.log(a === b); //true
console.log(b > a); //false

[특이한 동등 비교]

두 값이 절대적으로 동등한지를 확인하는 ES6부터 지원하는 유틸리티 Object.is()

0과 -0이 같은지 다른지 비교해주고,

NaN을 비교해준다.

직접 실습해봐랏!

출처

You Don’t Know JS, 카일 심슨 저, 한빛미디어

댓글남기기