
자바스크립트에서 숫자는 단순한 데이터 타입 그 이상입니다.
숫자 리터럴 외에도 Number 객체를 통한 다양한 조작이 가능하며,
정수/부동소수점/NaN/Infinity와 같은 특별한 값들도 함께 다루어야 합니다.
자바스크립트에서는 정수와 실수를 구분하지 않고 모두 하나의 number 타입으로 처리합니다.
// 자바스크립트는 IEEE-754 표준의 64비트 부동소수점 숫자 형식을 사용합니다.
typeof 10; // "number"
typeof 3.14; // "number"
Number는 숫자 타입을 감싸는 래퍼 객체(wrapper object)입니다.
const numObj = new Number(10);
console.log(typeof numObj);
일반 숫자 리터럴은 number 타입이지만, new Number()를 사용하면 객체가 생성됩니다.
일반적으로는 객체로 생성할 필요 없이 리터럴을 사용하는 것이 더 적절합니다.
0 / 0; // NaN
1 / 0; // Infinity
-1 / 0; // -Infinity
isNaN('abc'); // true
// 정적 프로퍼티
Number.MAX_VALUE // 가장 큰 수
Number.MIN_VALUE // 가장 작은 수 (0에 가까운 수)
Number.POSITIVE_INFINITY
Number.NEGATIVE_INFINITY
Number.NaN // NaN 값
// 정적 메서드
Number.isNaN(NaN); // true
Number.isFinite(100); // true
Number.isFinite(Infinity); // false
Number.parseInt("10.5"); // 10
Number.parseFloat("10.5"); // 10.5
// 인스턴스 메서드
const num = 123.456;
num.toFixed(2); // "123.46" (소수 둘째자리까지)
num.toString(); // "123.456"
num.toExponential(2); // "1.23e+2"
num.toPrecision(5); // "123.46"
// 자바스크립트에서는 연산 중 문자열을 숫자로 변환하기도 합니다.
'5' * 2; // 10
'5' + 2; // "52" → 문자열 연결
'5' - 2; // 3
// 소수 비교는 오차 범위를 고려해서 처리하는 것이 좋습니다.
0.1 + 0.2 === 0.3; // false
function isEqual(a, b) {
return Math.abs(a - b) < Number.EPSILON;
}
isEqual(0.1 + 0.2, 0.3); // true
| 구분 | 설명 |
|---|---|
| 숫자 타입 | 하나뿐인 number (정수, 실수 모두 포함) |
| Number 객체 | 숫자 값을 감싸는 래퍼 객체 |
| NaN | 수학적으로 정의되지 않은 결과 (Not-a-Number) |
| Infinity | 무한대 값 (1 / 0, -1 / 0 등) |
| 주요 메서드 | toFixed(), toString(), parseInt(), isNaN() 등 |
| 비교 주의 | 부동소수점 연산은 정확하지 않을 수 있음 (0.1 + 0.2) |