자바스크립트는 왜 그 모양일까 2
number
자바스크립트는 number라고 하는 하나의 숫자형을 가지고 있습니다.
number는 인텔의 iAPX-432 프로세서를 위해 처음 개발된 IEEE 부동소수점
연산 표준 (IEEE 754)을 차용했습니다. 자바스크립트는 숫자형이 하나뿐 이라는 단점을
가지고 있다고 비판 받았지만 오히려 개발자의 생산성을 증가시키게 되었습니다.
왜냐하면 비슷한 여러가지 타입 중 잘못된 타입을 사용할까 봐 고민하며
시간을 낭비하지 않아도 되기 때문입니다.
숫자 0
자바스크립트에는 0으로 표시되지만 0이 아닌 값이 있습니다다.
IEEE 754 표준에는 0과 -0 이라는 두 개의 0이 존재하고
다음 경우를 제외하고는 -0의 존재를 무시해도 됩니다.
(1 / 0) === (1 / -0) // false
Object.is(0 , -0) // false 숫자 리터럴
숫자 리터럴은 각 리터럴의 값과 가장 잘 맛는 숫자 객체에 대한 참조를 생성합니다
어떤경우네는 딱 맞는 값이고 어떤 경우에는 실제 값과 미세한 차이가 나기도 합니다.
NaN
NaN은 숫자가 아닌 숫자를 나타내는 값 입니다.
NaN은 "Not a Number"를 의미하고 typeof 연산자는
NaN을 "number" 형으로 표시되어 매우 헷갈린다.
NaN은 문자열을 숫자로 변환하려고 했으나 실패했을 때 결과값을 반환될 수 있다.
변환에 실패한 경우 오류가 발생하거나 프로그램이 멈추는 대시 NaN이 반환된다.
산술 연산자 입력 중에도 NaN이 있어도 결과값으로 NaN을 반환한다.
NaN은 자바스크립트가 숨기지 않은 IEEE 754의 단점인 부분이다.
NaN 과 NaN을 동등 연산자로 비교해 보면 서로 다른 결과를 보여주기 때문이다.
테스트의 기댓값이 NaN이고 실제 값이 NaN이라고 해도 항상 실패하게 된다.
그래서 값이 NaN인지 아닌지를 확인하기 위해서는 Number.isNaN(value)을 사용해 보면 된다.
Number
Number는 숫자를 만드는 함수입니다. 여기서 주의할 점은 수에 대한 typeof 연사자는
"number"를 반환하는데 이 둘은 엄연히 다르고 헷갈리시면 안됩니다!
NUMBER.MAX_SAFE_INTEGER는 약 9천조입니다. 자바스크립트의 숫자형은
Number.MAX_SAFE_INTEGER까지의 모든 정수형을 표현할 수 있어 다른 정수형
타입이 필요 없다.
Number.MAX_SAFE_INTEGER보다 큰 수에 1을 더하는 것은 0을 더하는 것이나 같다.
-Number.MAX_SAFE_INTEGER와 Number.MAX_SAFE_INTEGER 사이의
정수 값인 경우에만 올바른 정수 연산을 할 수 있습니다.
이 범위 내에서는 일반적인 수학적 연산, 결합법칙, 분배법칙이 적용 된다.
만약 이 범위를 벗어나는 경우에는 더하는 순서에 따라 값이 바뀔 수도 있다.