
표준빌트인 객체인 Number은 원시 타입인 숫자를 다룰 때 유용한 프로퍼티와 메서드를 제공합니다.
표준 빌트인 객체인 Number은 생성자 함수 객체이다. 따라서 new 연산자와 함께 생성자 함수로 호출하여 Number 인스턴스를 생성할 수 있습니다.
Number 생성자 함수에 인수를 전달하지 않고 new 연산자와 함께 호출하면 [[NumberData]] 내부 슬롯에 0을 할당한 Number 래퍼 객체를 생성합니다.
const numberObj = new Number();
console.log(numberObj); // Number { [[PrimitiveValue]]: 0 }
[[PrimitiveValue]] 내부 슬롯은 [[NumberData]] 내부 슬롯을 가리킵니다.
Number 생성자 함수에 인수로 숫자를 전달하면서 new 연산자와 함께 호출하면 [[NumberData]] 내부 슬롯에 인수로 전달한 숫자를 할당한 Number 래퍼 객체를 생성합니다.
const numberObj = new Number(10);
console.log(numberObj); // Number { [[PrimitiveValue]]: 10 }
Number 생성자 함수에 인수로 전달한 값이 숫자가 아니라면 암묵적으로 숫자 타입으로 변환하여 [[NumberData]] 내부 슬롯에 할당한 Number 래퍼 객체를 생성합니다. 만약 인수를 숫자 타입으로 변환할 수 없다면 NaN을 [[NumberData]] 내부 슬롯에 할당한 Number 래퍼 객체를 생성합니다.
new 연산자를 사용하지 않고 Number 생성자 함수를 호출하면 숫자를 반환합니다. 이를 이용하야 인수를 암묵적으로 숫자 타입으로 변환하는 명시적 타입 변환으로 사용하기도 합니다.
: ES6에 도입된 Number.EPSILON은 1과 1보다 큰 숫자 중 가장 작은 숫자와의 차이와 같습니다. 이를 이용하여 부동 소수점의 오차를 해결할 수 있습니다.
부동 소수점을 표현하기 위해 IEEE754는 2진법으로 변환했을 때 무한 소수가 되어 미세한 오차가 발생하는 구조적인 한계가 존재합니다.
function isEqual(a, b) {
// a와 b를 뺀 값의 절대값이 Number.EPSILON보다 작은 경우 같은 수로 인정합니다.
return Math.abs(a-b) < Number.EPSILON;
}
isEqual(0.1 + 0.2, 0.3); // true
: Number.MAX_VALUE 프로퍼티는 자바스크립트에서 표현할 수 있는 가장 큰 양수값입니다.
: Number.MIN_VALUE 프로퍼티는 자바스크립트에서 표현할 수 있는 가장 작은 양수 값입니다.
: Number.MAX_SAFE_INTEGER 프로퍼티는 자바스크립트에서 안전하게 표현할 수 있는 가장 큰 정수값입니다.
: Number.MIN_SAFE_INTEGER 프로퍼티는 자바스크립트에서 안전하게 표현할 수 있는 가장 작은 정수값입니다.
: Number.POSITIVE_INFINITY 프로퍼티는 양의 무한대를 나타내는 숫자값 infinity와 같습니다.
: Number.NEGATIVE_INFINITY 프로퍼티는 음의 무한대를 나타내는 숫자값 -infinity와 같습니다.
: Number.NaN은 숫자가 아님을 나타내는 숫자값입니다. window.NaN와 같은 값을 나타냅니다.
: ES6에 도입된 Number.isFinite 정적 메서드는 인수로 전달된 숫자값이 유한수인지 검사하여 불리언 값을 반환합니다.
window.isFinite 빌트인 메서드의 경우에는 전달된 인수가 숫자값이 아니라면 암묵적으로 숫자값으로 변환하여 검사를 진행하지만, Number.isFinite의 경우 인수를 암묵적으로 숫자값으로 변환하지 않습니다. 즉, 숫자값이 아닌 값을 인수로 전달시 항상 false가 반환됩니다.
: ES6에 도입된 Number.isNaN은 인수로 전달된 값이 NaN인지 검사한 결과를 불리언 값으로 반환합니다.
window.isNaN 메서드의 경우 인수가 숫자값이 아니라면 암묵적으로 숫자값으로 변환하여 검사를 진행하지만, Number.isNaN는 인수를 숫자값으로 암묵적 타입 변환을 실시하지 않습니다.
: ES6에 도입된 Number.isInteger은 인수로 전달된 숫자값이 정수인지 검사하여 그 결과를 불리언 값으로 반환합니다. 이때 인수를 숫자값으로 암묵적 타입 변환을 하지 않습니다.
: ES6에 도입된 Number.isSafeInteger 메서드는 인수로 전달된 숫자값이 안전한 정수인지 검사하여 그 결과를 불리언 값으로 반환합니다. 이때 인수를 숫자값으로 암묵적 타입 변환을 하지 않습니다.
숫자 리터럴과 함께 Number 프로토타입 메서드를 호출하는 경우 숫자 리터럴을
소괄호로 감싸 호출하는 것을 권장합니다. 숫자 뒤 . 는 부동 소수점 숫자의 소수 구분 기호로 해석되기 때문입니다.
: toExponential 메서드는 숫자를 지수 표기법으로 변환한 문자열을 반환합니다. 인수로 소수점 이하로 표현할 자리수를 전달할 수 있습니다.
(10.1234).toExponential(); // "1.01234e+1"
(10.1234).toExponential(3); // "1.012e+1"
: toFixed 메서드는 숫자를 반올림한 문자열로 반환합니다. 반올림하는 소수점 이하 자릿수를 나타내는 0~20 사이의 정수값을 인수로 전달할 수 있습니다. 인수 생략시 기본값 0이 지정됩니다.
(12345.6789).toFixed(); // "12346"
(12345.6789).toFixed(2); // "12345.68"
: toPrecision 메서드는 인수로 전달받은 전체 자리수까지 유효하도록 나머지 자릿수를 반올림하여 문자열로 반환합니다. 인수로 전달받은 전체 자릿수로 표현할 수 없는 경우 지수 표기법을 사용하여 결과를 반환합니다.
인수 생략시 기본값 0이 지정되며, 인수는 전체 자리수를 나타내는 0~21 사이의 정수값을 인수로 전달할 수 있습니다.
(12345.6789).toPrecision(); // "12345.6789"
(12345.6789).toPrecision(2); // "1.2e+4"
: toString 메서드는 숫자를 문자열로 변환하여 반환합니다. 진법을 나타내는 2~36사이의 정수값을 인수로 전달할 수 있습니다. 인수 생략시 기본값 10진법이 적용됩니다.
//10을 10진법 문자열로 변환
(10).toString(); // "10"
// 16을 2진수 문자열로 변환
(16).toString(2); // "1000"