Numbers

숫자 값은 일련의 숫자로 구성됩니다. 예를 들면 다음과 같습니다.

5

또한 숫자 데이터 유형에는 숫자 개념을 나타내는 몇 가지 특수한 전역 속성(예: InfinityNaN)이 포함됩니다. 이 속성은 '숫자가 아님'을 의미하는 값이며, 숫자가 아닌 값에 대해 수학적 계산을 시도할 경우의 잠재적 결과입니다.

숫자 객체

값이 Number() 함수에 전달되면 해당 값은 이에 상응하는 숫자로 변환됩니다. 예를 들어 숫자 문자열은 다음과 같이 동일한 숫자의 프리미티브가 됩니다.

Number( "10" );
> 10

false 또는 null 값을 Number()에 전달하면 0이 반환되고 true1를 반환합니다.

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

undefined 또는 숫자가 아닌 문자가 포함된 문자열의 경우와 같이 값을 변환할 수 없는 경우 Number 함수는 NaN를 반환합니다.

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

프로토타입 상속에서 자세히 설명했듯이 Number 객체를 생성자로 사용할 이유가 거의 또는 전혀 없습니다. 이 객체는 숫자 리터럴 대신 Number 객체를 생성하기 때문입니다.

let numObject = new Number( 15 );

numObject;
> Number { 15 }

이 객체는 수학 연산에서 할당된 값으로 작동하지만 숫자 리터럴에 대한 엄격한 동등 비교에 실패합니다. 데이터 유형이 일치하지 않기 때문입니다. 리터럴 값에 비해 실질적인 이점을 제공하지 않습니다.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

부동 소수점 수 및 정수

JavaScript에는 -2^10242^1024 사이의 64비트 IEEE 754-1985 배정밀도 부동 소수점 수라는 하나의 숫자 유형만 있습니다. JavaScript는 숫자를 메모리에 저장하기 전에 먼저 숫자를 float라고도 하는 바이너리 부동 소수점 숫자로 변환합니다.

이 64비트 저장소 (양 또는 음의 '부호' 비트 1개, 지수의 11비트, 분수에 52비트)는 허용 범위 내에 들어가지 않는 자릿수에 대해 정밀도 오류를 일으킬 수 있습니다. 이러한 제한은 JavaScript의 숫자 데이터 유형에 따른 것입니다.

0.1 + 0.7
> 0.7999999999999999

대신 숫자 값은 -(2^53 − 1)2^53 − 1 사이의 소수가 없는 부동 소수점 수인 정수로 저장될 수 있습니다. 부동 소수점 수와 정수는 동일한 기본적인 방식으로 저장되므로 이러한 숫자가 작동하는 방식에는 실질적인 차이가 없습니다. 하지만 정밀도 오류를 방지하려면 가능한 한 정수를 사용하는 것이 좋습니다.

숫자 연산자

숫자 프리미티브와 함께 표준 수학 연산자를 사용하면 수학적 연산 순서가 적용됩니다. 괄호로 묶인 모든 표현식이 먼저 평가되고 지수, 곱셈, 나누기, 덧셈, 뺄셈이 나옵니다.

연산자 이름 설명 사용량 결과
+ 덧셈 2+2 4
- 뺄셈 4-2 2
* 곱셈 2*5 10
/ 구분 10/5 2
++ 델타 숫자에 1을 더합니다. 2++ 3
-- 줄이기 숫자에서 1을 뺍니다. 3-- 2
** 지수 첫 번째
피연산자를 두 번째 피연산자로 거듭제곱한 결과를 반환합니다.
2**4 16
% 나머지
의 첫 번째 피연산자를 두 번째 피연산자로 나눈 후 남은 나머지를 반환합니다.
12%5 2

또한 수학 할당 연산자를 사용하여 변수 값에 대한 수학적 연산을 수행하고 새로 계산된 값을 변수에 즉시 할당할 수 있습니다.

연산자 이름 사용량
+= 추가 할당 myValue += 2
-= 뺄셈 할당 myValue -= 2
*= 곱하기 할당 myValue *= 2
/= 부서 배정 myValue /= 2
**= 지수 할당 myValue **= 2
%= 나머지 할당 myValue %= 2

기호화된 값

숫자 프리미티브는 '숫자가 아닌' 값 (NaN)과 양수(Infinity) 또는 음수 (-Infinity)가 될 수 있는 무한대를 나타내는 값에도 적용됩니다.

0으로 나눈 결과 Infinity가 드물게 발생할 수 있으며, 대부분의 프로그래밍 언어에서 대신 오류가 발생합니다.

10 / 0
> Infinity

JavaScript는 대소문자를 구분합니다. Infinity은 무한대 개념을 나타내는 숫자 데이터 유형이지만 infinity에는 특별한 의미가 없습니다.

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN('숫자가 아님'을 의미함)는 산술 연산의 결과를 숫자로 표현할 수 없는 경우 더 자주 표시됩니다. 예를 들어 JavaScript는 값과 컨텍스트에서 데이터 유형을 추론하려고 하므로 숫자만 포함하는 문자열 리터럴을 수학 연산에 사용할 수 있습니다.

"2" * 2;
> 4

그러나 이 문자열을 숫자 값으로 파싱할 수 없는 경우 수학 연산의 결과는 숫자가 아닙니다.

"two" * 2;
> NaN

NaN는 잘못된 값이 수학 연산에서 숫자로 표현되는 모든 경우에 반환됩니다. 예를 들면 다음과 같습니다.

  • 숫자 변환 실패 (예: parseInt( undefined ))
  • 결과가 실수가 아닌 산술 연산 (예: 0 / 0, Math.sqrt( -10 ))
  • 확정된 결과가 없는 산술 연산 (0 * Infinity)
  • 명시적 NaN (NaN + 2) 또는 NaN 결과 (2 * "string" / 2)를 포함하는 산술 연산

이해도 확인

falseNumber()에 전달한 결과는 무엇인가요?

0
거짓
NaN
1

다음 수학 연산의 결과는 무엇인가요?

"Six" * 3

NaN
2
18
0