JavaScript 숫자

숫자 타입

예제 1
let x = 3.14;    // 소수가 있는 숫자
let y = 3;       // 소수가 없는 숫자

지수 표기법으로 큰 숫자나 작은 숫자를 쓸 수 있습니다.

예제 2
let x = 123e5;    // 12300000
let y = 123e-5;   // 0.00123

JavaScript 번호는 항상 64비트 부동 소수점입니다.

다른 많은 프로그래밍 언어들과 달리 자바스크립트는 int, short, long, float 등과 같은 다른 유형의 숫자를 정의하지 않습니다.

자바스크립트 번호는 국제 IEEE 754 표준에 따라 항상 double 부동 소수점 번호로 저장됩니다.

이 형식은 64비트로 숫자를 저장합니다. 여기서 숫자(분수)는 비트 0~51, 지수(비트 52~62) 및 부호(비트 63)는 비트 0~51로 저장됩니다.

정수 정밀도

정수(주기 또는 지수 표기법이 없는 숫자)는 최대 15자리까지 정확합니다.

예제 3
let x = 999999999999999;   // x : 999999999999999
let y = 9999999999999999;  // y : 10000000000000000

소수점 이하는 17자리 수가 최대입니다.

부동 소수 정밀도

부동 소수점 산술이 항상 100% 정확한 것은 아닙니다.

예제 4
let x = 0.2 + 0.1;

위의 문제를 해결하기 위해 곱셈과 나눗셈을 할 수 있습니다.

let x = (0.2 * 10 + 0.1 * 10) / 10;

숫자 및 문자열 추가

경고: 자바스크립트는 더하기와 연결 모두에 + 연산자를 사용합니다.
숫자는 더하고 문자열은 연결합니다.

두 개의 숫자를 더하면 결과는 숫자입니다.

예제 5
let x = 10;
let y = 20;
let z = x + y;

두 개의 문자열을 더하면 결과는 연결된 문자열입니다.

예제 6
let x = "10";
let y = "20";
let z = x + y;

문자열과 숫자를 더하면 결과는 숫자와 문자열이 연결된 문자열입니다.

예제 7
let x = "10";
let y = 20;
let z = x + y;

일반적인 실수는 아래 결과를 30으로 예상하는 것입니다.

예제 8
let x = 10;
let y = 20;
let z = "The result is: " + x + y;

일반적인 실수는 아래 결과를 102030으로 예상하는 것입니다.

예제 9
let x = 10;
let y = 20;
let z = "30";
let result = x + y + z;

JavaScript 인터프리터는 왼쪽에서 오른쪽으로 작동합니다.
10 + 20은 x와 y가 모두 숫자이기 때문에 더해집니다.
30 + “30”은 z가 문자열이기 때문에 연결됩니다.

숫자 문자열

JavaScript 문자열에는 숫자 콘텐츠가 포함될 수 있습니다.

let x = 100;         // x : 숫자 타입

let y = "100";       // y : 문자열 타입

JavaScript는 모든 숫자 연산에서 문자열을 숫자로 변환하려고 시도합니다.

아래 구문은 실행됩니다.

let x = "100";
let y = "10";
let z = x / y;

아래 구문은 실행됩니다.

let x = "100";
let y = "10";
let z = x * y;

아래 구문은 실행됩니다.

let x = "100";
let y = "10";
let z = x - y;

아래 구문은 실행되지 않습니다.

let x = "100";
let y = "10";
let z = x + y;

마지막 예제에서 JavaScript는 + 연산자를 사용하여 문자열을 연결합니다.

NaN - Not a Number

NaN은 숫자가 법정 번호가 아님을 나타내는 자바스크립트 예약 단어입니다.

숫자가 아닌 문자열로 산술을 시도하면 NaN(숫자가 아님)이 됩니다.

예제 10
let x = 100 / "Apple";

그러나 문자열에 숫자 값이 포함된 경우 결과는 숫자입니다.

예제 11
let x = 100 / "10";

전역 JavaScript 함수 NaN()을 사용하여 값이 NaN인지 확인할 수 있습니다.

예제 12
let x = 100 / "Apple";
isNaN(x);

NaN을 주의하세요. 수학적 연산에 NaN을 사용하는 경우 결과도 NaN이 됩니다.

예제 13
let x = NaN;
let y = 5;
let z = x + y;

또는 NaN5와 같은 연결이 될 수 있습니다.

예제 14
let x = NaN;
let y = "5";
let z = x + y;

NaN은 숫자입니다. type of NaN의 반환값은 number입니다.

예제 15
typeof NaN;

Infinity

Infinity(또는 -Infinity)는 가능한 최대 수를 벗어나는 숫자를 계산할 경우 JavaScript가 반환하는 값입니다.

예제 16
let myNumber = 2;
// 무한대까지 실행
while (myNumber != Infinity) {
  myNumber = myNumber * myNumber;
}

0으로 나누면 Infinity가 됩니다.

예제 17
let x =  2 / 0;
let y = -2 / 0;

Infinity는 숫자입니다. typeof Infinity의 반환값은 number입니다.

예제 18
typeof Infinity;

16진수

JavaScript는 숫자 상수가 0x 앞에 오는 경우 16진수로 해석합니다.

예제 19
let x = 0xFF;

선행 0(예: 07)으로 숫자를 작성하지 마십시오.
일부 자바스크립트 버전에서는 숫자가 선행 0으로 작성되면 8진법으로 해석하기도 합니다.

기본적으로 JavaScript는 숫자를 10진수로 표시합니다.

그러나 toString() 메서드를 사용하여 2진수에서 36진수까지의 숫자를 출력할 수 있습니다.

예제 20
let myNumber = 32;
myNumber.toString(32);
myNumber.toString(16);
myNumber.toString(12);
myNumber.toString(10);
myNumber.toString(8);
myNumber.toString(2);

객체로써의 숫자

일반적으로 자바스크립트 번호는 리터럴에서 생성된 원시 값이다.

let x = 123;

숫자는 new 키워드를 가진 객체로 정의될 수도 있습니다.

let y = new Number(123);
예제 21
let x = 123;
let y = new Number(123);

Number 객체를 만들지 마십시오.
new 키워드는 코드를 복잡하게 만들고 실행 속도를 느리게 합니다.
Number 객체는 예상치 못한 결과를 초래할 수 있습니다.

== 연산자를 사용할 때 x와 y는 같습니다.
let x = 500;
let y = new Number(500);
=== 연산자를 사용할 때 x와 y는 같지 않습니다.
let x = 500;
let y = new Number(500);

(x==y)(x===y)의 차이를 확인합니다.

(x == y) 참? 거짓?
let x = new Number(500);
let y = new Number(500);
(x === y) 참? 거짓?
let x = new Number(500);
let y = new Number(500);

두 JavaScript 객체를 비교하면 항상 false가 반환됩니다.