Section 6. 자바스크립트 Number 객체
I. 생성자 함수
const numObj1 = new Number();
const numObj2 = new Number(123);
const numObj3 = new Number(-123.45);
console.log(numObj1, numObj2, numObj3);//Number {0} Number {123} Number {-123.45}
String 생성자 함수에 이어서 Number 생성자 함수를 살펴보면 위와 같다.
인자가 없을 시 0이 반환되는 것을 볼 수 있다.
Number 생성자 함수도 PrimitiveValue를 살펴보면 다음과 같다.

모두 PrimitiveValue에 원시값이 저장되는 것을 알 수 있다.
console.log(
numObj1.valueOf(),
numObj2.valueOf(),
numObj3.valueOf()
); //0 123 -123.45
valueOf를 사용해서 원시값을 반환했다.
특정 숫자값으로 인식되는 것들을 살펴보면 다음과 같다.
console.log(
new Number('-123.4567'),
new Number('Infinity'),
new Number(true),
new Number(false)
); //Number {-123.4567} Number {Infinity} Number {1} Number {0}
NaN
console.log(
new Number('1/2'),
new Number('123ABC'),
new Number('ABC'),
new Number('{a: 1, b: 2}'),
new Number([1, 2, 3])
); //Number {NaN} Number {NaN} Number {NaN} Number {NaN} Number {NaN}
new 없이 사용하면 String과 마찬가지로 Number 함수는 주어진 인자를 숫자로 변환하여 반환한다.
const num1 = Number('123');
const num2 = Number('-123.45');
const num3 = Number(true);
const num4 = Number(false);
const num5 = Number(null);
console.log(typeof num1, num1); //number 123
console.log(typeof num2, num2); //number -123.45
console.log(typeof num3, num3); //number 1
console.log(typeof num4, num4); //number 0
console.log(typeof num5, num5); //number 0
II. 정적 프로퍼티
1. EPSILON
(Number 형에서 표현 가능한 1보다 큰 가장 작은 수) - 1 한 것을 말한다.
부동소수점으로 인한 계산 오차 문제 해결에 사용한다.
console.log(Number.EPSILON); //2.220446049250313e-16
console.log(0.1 + 0.2); //0.30000000000000004
console.log((0.1 + 0.2) - 0.3 < Number.EPSILON) //true
2. MAX_VALUE, MIN_VALUE
자바스크립트에서 표현 가능한 가장 큰 수와 작은 수를 반환하는 프로퍼티이다.
console.log(Number.MAX_VALUE); //1.7976931348623157e+308
console.log(Number.MIN_VALUE); //5e-324
3. MAX_SAFE_INTEGER, MIN_SAFE_INTEGER
자바스크립트의 부동소수점 체계에서 안정적으로 나타낼 수 있는 가장 큰 수와 작은 정수를 반환하는 프로퍼티이다.
console.log(Number.MAX_SAFE_INTEGER); //9007199254740991
console.log(Number.MIN_SAFE_INTEGER); //-9007199254740991
더 큰 정수도 표현 자체는 가능하지만 불안정하다. 안전하게 더 큰 정수를 표현하려면 BigInt 타입으로 표현해야 한다.
4. POSITIVE_INFINITY, NEGATIVE_INFINITY
양과 음의 Infinity를 반환하는 프로퍼티이다.
console.log(Number.POSITIVE_INFINITY); //Infinity
console.log(Number.NEGATIVE_INFINITY); //-Infinity
5. NaN
전역 객체(globalThis)의 NaN과 같은 값을 반환하는 프로퍼티이다.
console.log(Number.NaN); //NaN
III. 전역 객체에도 있는 메서드들
a. 동일하지 않음 : isFinite, isNaN
console.log(
isFinite(null), // null을 0으로 변환
Number.isFinite(null)
); //true false
console.log(
isNaN('abc'), // 숫자타입의 NaN으로 변환
Number.isNaN('abc') // 숫자타입 자체가 아니므로 false
); //true false
중요한 것은 전역 객체 (globalThis)의 해당 메소드와의 차이는 암묵적 타입 변환을 하지 않는다는 것
b. 동일함 : parseInt, parseFloat
각각 전역의 동명 메서드들을 가리킨다. parseInt, parseFloat
console.log(
Number.parseInt('123.4567'),
Number.parseFloat('123.4567')
); //123 123.4567
2. (안전한) 정수 여부 확인 isInteger, isSafeInteger
console.log(
Number.isInteger(123),
Number.isInteger(123.45)
); //true false
console.log(
// 암묵적 변환 하지 않음
Number.isInteger('123'),
Number.isInteger(true),
Number.isInteger(Infinity)
); //false false false
console.log(
Number.isSafeInteger(123),
Number.isSafeInteger(123.45)
); //true false
console.log(
Number.isSafeInteger(Number.MAX_SAFE_INTEGER),
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)
); //true false
IV. 인스턴스 메서드
값 자체에서 호출시 괄호로 감싸야 한다. 왜냐하면 소수점과 구분이 불가능하기 때문이다.
1. toExponential
지수 표기법으로 나타내는 문자열을 반환하는 메서드이다.
const numInExp = (123.456789).toExponential();
console.log(
typeof(numInExp), numInExp
); //string 1.23456789e+2
인자로 자릿수를 제한할 수 있다.
// 인자로 자릿수 제한
console.log(
(123.456789).toExponential(2),
(123.456789).toExponential(4),
(123.456789).toExponential(6)
); //1.23e+2 1.2346e+2 1.234568e+2
2. toFixed
최대 인자값으로 주어진 정수 (0~20)만큼 소수점 이하를 반올림하여 문자열로 반환하는 메서드이다.
console.log(
// 인자가 없으면 0을 받은 것과 같음
(111.234567).toFixed(),
(111.234567).toFixed(0)
); //111 111
console.log(
(111.234567).toFixed(1),
(111.234567).toFixed(2)
); //111.2 111.23
console.log(
// 반올림
(111.234567).toFixed(3),
(111.234567).toFixed(4)
); //111.235 111.2346
3. toPrecision
반올림과 지수 표기법을 사용하여 문자열을 반환하는 메서드이다.
console.log(
// 인자가 없으면 toString처럼 그대로 문자열로 반환
(1234.56789).toPrecision()
); //1234.56789
인자가 정수부 자릿수보다 적으면 지수로 반환한다.
console.log(
(1234.56789).toPrecision(1),
(1234.56789).toPrecision(2),
(1234.56789).toPrecision(3)
); /1e+3 1.2e+3 1.23e+3
// 반올림
console.log(
(1234.56789).toPrecision(4),
(1234.56789).toPrecision(6),
(1234.56789).toPrecision(8)
); //1235 1234.57 1234.5679
4. toString
문자열 값을 반환하는 메서드이다.
인자 2~36가 주어지면 해당 수의 진수로 표현한다.
console.log(
(11).toString(),
(11).toString(2),
(11).toString(8),
(11).toString(16)
); //11 1011 13 b