Number 객체는 생성자 함수 객체이다. 따라서 new연산자와 함꼐 호출하여 Number 인스턴스를 생성 할 수 있다.
Number 생성자 함수
인수를 전달하지 않고 new 연산자와 함께 호출하면 [[numberData]] 내부 슬롯에 0을 할당한 Number 객체를 생성하다.
const numObj = new Number();
console.log(numObj); //[[primitiveValue]] : 0

Number 생성자 함수의 인수로 숫자가 아닌 값을 전달하면 인수를 숫자로 강제 변환 후, [[NumberData]] 내부 슬롯에 변환된 숫자를 할당한 Number 객체를 생성한다.
const numObj = new Number('10');
console.log(numObj); //[[primitiveValue]] : 10
numObj = new Number('Hello');
console.log(numObj); //[[primitiveValue]] : NaN
new 연산자를 사용하지 않고 Number 생성자 함수를 호출하면 Number 인스턴스가 아닌 숫자를 반환한다.
// 문자열타입 => 숫자타입
Number('0'); // -> 0
Number('-1'); // -> -1
Number('10.53'); // -> 10.53
// 불리언 타입 => 숫자 타입
Number(true); // -> 1
Number(false); // -> 0
Number 프로퍼티
Number.EPSILON
Number.EPSILON은 1과 1보다 큰 숫자 중에서 가장 작은 숫자와의 차이와 같다.
( Number.EPSILON == 2.220446049250313e-16 )
0.1 + 0.2 ; // → 0.30000000000000004
0.1 + 0.2 === 0.3 ; // → false
위의 예제와 같이 부동소수점 산술 연산은 정확한 결과를 기대하기 어렵다.
👉 정수는 2진법으로 계산하지만, 부동소수점을 표현하기 위해 가장 널리 쓰이는 표준인 IEEE754는 2진법으로 변환했을때 무한 소수가 되어 미세한 오차가 발생한다.
Number.EPSILON은 부동소수점으로 인해 발생하는 오차를 해결하기 위해 사용한다.
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.MIN_VALUE보다 작은 숫자는 0이다.
Number.MIN_VALUE; // -> 5e-324
Number.MIN_VALUE > 0; // -> true
Number.MAX_SAFE_INTEGER
Number.MAX_SAFE_INTEGER는 자바스크립트에서 안전하게 표현할 수 있는 가장 큰 정수값이다.
Number.MAX_SAFE_INTEGER; // → 9007199254740991
Number.POSITIVE_INFINITY
Number.POSITIVE_INFINITY는 양의 무한대를 나타내는 숫자값 Infinity와 같다.
Number.POSITIVE_INFINITY; // → Infinity
Number.NEGATIVE_INFINITY
Number.NEGATIVE_INFINITY는 음의 무한대를 나타내는 숫자값 -Infinity와 같다.
Number.NAGATIVE_INFINITY; // → -Infinity
Number.NaN
Number.NaN은 숫자가 아님 ( Not-a-Number)을 나타내는 숫자값이다.
Number.NaN은 window.NaN과 같다.
Number.NaN; // → NaN
Number 메서드
Number.isFinite
Number.isFinite 정적 메서드는 인수로 전달된 숫자값이 정상적인 유한수, 즉 Infinity 또는 -Infinity가 아닌지 검사하여 그 결과를 불리언 값으로 반환한다.
(유한수이면 true, 무한수이면 false를 반환)
Number.isFinite(0); // true
Number.isFinite(Number.MAX_VALUE); //true
Number.isFinite(Number.MIN_VALUE); //true
Number.isFinite(Infinity); // flase
Number.isFinite(-Infinity); // false
👉 만약 인수가 NaN이면 언제나 false를 반환한다.
빌트인 전역함수 isFinite는 전달받은 인수를 숫자로 암묵적 타입 변환하여 검사를 수행하지만 Number.isFinite는 전달받은 인수를 숫자로 암묵적 타입 변환하지 않는다.
//Number.isFinite는 인수를 숫자로 암묵적 타입 변환하지 않는다.
Number.isFinite(null); // false
// isFinite는 인수를 숫자로 암묵적 타입 변환한다.
// null은 0으로 암묵적 타입 변환이 된다.
isFinite(null); // true
Number.isInteger
Number.isInteger 정적 메서드는 인수로 전달된 숫자값이 정수인지 검사하여 그 결과를 불리언 값으로 반환한다.
Number.isInteger(0); // true
Number.isInteger(123); // true
Number.isInteger(-123); // true
Number.isInteger(0.5); // false (0.5는 정수가 아니기 때문!)
Number.isInteger('123'); // false (암묵적으로 숫자 타입으로 변환하지 않는다.)
Number.isInteger(false); // false
Number.isInteger(Infinity); // false (Infinity, -Infinity는 정수 x 무리수o)
Number.isNaN
Number.isNaN 정적 메서드는 인수로 전달된 숫자값이 NaN인지 검사하여 그 결과를 불리언값으로 반환한다. 인수가 NaN이면 true를 반환한다.
Number.isNaN(NaN); // true
빌트인 전역함수 isNaN은 전달받은 인수를 숫자로 암묵적 타입 변환하여 검사를 수행하지만 Number.isNaN은 전달받은 인수를 숫자로 암묵적 타입 변환하지 않는다.
Number.isNaN(undefined); // flase
isNaN(undefined); // true , undefined는 NaN으로 타입이 변환된다.
Number.isSafeInteger
Number.isSafeInteger 정적 메서드는 인수로 전달된 숫자값이 안전한 정수인지 검사하여 그 결과를 불리언 값으로 반환한다. 검사 전에는 인수를 숫자로 암묵적 타입 변환을 하지 않는다.
👉 안전한 정수값은 -(2^53 -1)과 2^53 -1 사이의 정수값이다.
Number.isSafeInteger(0); // true
Number.isSafeInteger(100000000000000001); // false
Number.isSafeInteger(0.5); // false, 0.5는 정수가 아니기 때문
Number.isSafeInteger('123'); // false , 암묵적으로 타입 변환을 하지 않는다.
Number.porototype.toExponential
toExponential 메서드는 숫자를 지수 표기법으로 변환하여 문자열로 반환한다.
👉 지수표기법이란 ? e앞에 있는 숫자에 10의 n승을 곱하는 형식으로 수를 나타내는 형식이다. 인수로 소수점 이하로 표현할 자릿수를 전달 할 수 있다. ( 자리수만큼 반올림하여 지수 표기법으로 나타낸다. )
(77.1234).toExponential(); // "7.71234e+1"
(77.1234).toExponential(4); // "7.71234e+1"
(77.1234).toExponential(2); // "7.71e+1"
- 숫자 리터럴과 함께 Number 프로토타입 메서드를 사용할 경우 에러가 발생한다.
- 숫자 뒤의 .은 의미가 모호하다. 자바스크립트 엔진은 숫자 뒤의 .을 부동소수점 숫자의 소수 구분기호로 해석한다.
77.toExponential(); // SyntaxError : Invalid or unexpected token
숫자 77뒤의 . 뒤에는 숫자가 이어지므로 .은 명백하게 부동소수점 숫자의 소수 구분기호다. 숫자 리터럴과 함께 메서드를 사용할 경우 혼란을 방지하기 위해 그룹 연산자를 사용할것을 권장한다.
77.1234.toExponential(); // "7.71234e+1"
(77).toExponential(); // "7.7e+1"
//숫자 뒤의 . 뒤에 공백이 오면 .을 프로퍼티 접근 연산자로 해석한다.
77 .toExponential(); // "7.7e+1" ⭐⭐
Number.prototype.toFixed
toFixed 메서드는 숫자를 반올림하여 문자열로 반환한다.
반올림하는 소수점 이하 자릿수를 나타내는 0~20사이의 정수값을 인수로 전달할 수 있다. 인수를 생략하면 기본값 0이 지정된다.
(12345.6789).toFixed(); // "123456"
(12345.6789).toFixed(1); // "12345.7"
(12345.6789).toFixed(3); // "12345.6789"
Number.prototype.toPrecision
toPercision 메서드는 인수로 전달받은 전체 자릿수까지 유요하도록 나머지 자릿수를 반올림하여 문자열로 반환한다.
전체 자릿수를 나타내는 0~21 사이의 정수값을 인수로 전달할 수 있다. 인수를 생략하면 기본값 0이 지정된다.
👉 전체 자릿수로 표현할 수 없는 경우 지수 표기법으로 결과를 문자열로 반환한다.
(12345.6789).toPrecision(); // 12345.6789
(12345.6789).toPercision(1); // "1e+4"
(12345.6789).toPercision(6); // "12345.7"
Number.prototype.toString
toString메서드는 숫자를 문자열로 변환하여 반환한다.
진법을 나타내는 2~36사이의 정수값을 인수로 전달할 수 있다. 인수를 생략하면 10진법이 지정된다.
(10).toString(); // "10"
(16).toString(2); // "10000"
(16).toString(8); // "20"
(16).toString(16); // "10"'🧡공부기록 > javascript, jquery' 카테고리의 다른 글
| [ javascript ] 디스트럭처링 할당 (0) | 2022.10.19 |
|---|---|
| [javascript] 스프레드 문법 (0) | 2022.10.19 |
| [ javascript ] 배열 개념 정리 (0) | 2022.10.17 |
| [ javascript ] ES6함수의 추가 기능 ( 함수의 구분, 화살표함수, Rest 파라미터, 매개변수 기본값) 개념 정리 (0) | 2022.10.17 |
| [ javascript ] 데이터 타입 개념정리 (0) | 2022.10.17 |