티스토리 뷰

[딥다이브] 28. Number

codeyun2 2024. 8. 6. 00:02

28.1 Number 생성자 함수

const numObj = new Number();
console.log(numObj); // Number {[[PrimitiveValue]]: 0}

인수를 전달하지 않고 new 연산자와 Number 생성자 함수를 호출할 경우

[[NumberData]] 내부 슬롯에 0을 할당한 Number 래퍼 객체 생성

[[PrimitiveValue]]는 [[NumberData]] 내부 슬롯을 가리킴(ES5에서 사용)

 

인수를 전달할 경우 [[NumberData]] 내부 슬롯에 인수로 전달받은 숫자를 할당

 

인수로 숫자가 아닌 값을 전달할 경우 인수를 숫자로 강제 변환

변환할 수 없다면 NaN

 

new 연산자와 함께 호출하지 않는다면 Number 인스턴스(객체)가 아닌 숫자를 반환

 

28.2 Number 프로퍼티 

1. Number.EPSILON

1과 1보다 큰 숫자 중에서 가장 작은 숫자와의 차이와 같음

2.2204460492503130808472633361816 * (10 ** -16)

 

부동소수점을 표현하기 위해 사용하는 표준 IEEE 754는 2진법 변환 시 무한소수가 되어 미세한 오차가 발생

Number.EPSILON은 부동소수점으로 인해 발생하는 오차를 해결하기 위해 사용

// a - b의 절대값이 Number.EPSILON보다 작으면 같은 수로 인정
function isEqual(a, b) {
  return Math.abs(a - b) < Number.EPSILON;
}

 

2. Number.MAX_VALUE

자바스크립트로 표현할 수 있는 가장 큰 양수 값 < Infinity

1.7976931348623157 * (10 ** 308)

 

3. Number.MIN_VALUE

자바스크립트로 표현할 수 있는 가장 작은 양수 값 > 0

5 * (10 ** -324)

 

4. Number.MAX_SAFE_INTEGER

자바스크립트에서 안전하게 표현할 수 있는 가장 큰 정수값

9007199254740991

 

5. Number.MIN_SAFE_INTEGER

자바스크립트에서 안전하게 표현할 수 있는 가장 작은 정수값

-9007199254740991

 

6. Number.POSITIVE_INFINITY

양의 무한대

Infinity

 

7. Number.NEGATIVE_INFINITY

음의 무한대

-Infinity

 

8. Number.NaN

Not-a-Number

숫자 타입

window.NaN과 같음

 

28.3 Number 메서드

1. Number.isFinite

인자가 무한한 값(Infinity, -Infinity)인지 검사하여 boolean 리턴

숫자가 아닌 값(NaN)이 전달된 경우 false

암묵적 타입 변환하지 않음(전역 함수 isFinite는 암묵적 타입 변환하여 검사)

 

2. Number.isInteger 

인자가 정수인지 검사하여 boolean 리턴

암묵적 타입 변환하지 않음

 

3. Number.isNaN

인자가 NaN인지 검사하여 boolean 리턴(isNaN은 암묵적 타입 변환하여 검사)

 

4. Number.isSafeInteger

인자가 안전한 정수인지 검사하여 boolean 리턴

-(2 ** 53 - 1) ~ 2 ** 53 - 1 사이의 정수

암묵적 타입 변환하지 않음

 

5. Number.prototype.toExponential

숫자를 지수 표기법(10의 n승)으로 변환하여 문자열 리턴

 

부동소수점을 구분하는 기호인지 프로퍼티에 접근하는 접근자인지 모호하기 때문에

숫자를 그룹 연산자로 묶은 뒤 메서드 호출

77.toExponential(); // SyntaxError
(77).toExponential(); // "7.7e+1"
77.1234.toExponential(); // "7.71234e+1"

 

6. Number.prototype.toFixed

인자로 받는 소숫점 자릿수(기본값 0)를 기준으로 반올림하여 문자열 리턴

 

7. Number.prototype.toPrecision

인수로 전달받는 자랏수까지 유효하도록 반올림하여 문자열 리턴

인수로 받은 전체 자릿수로 표현할 수 없는 경우 지수 표기법으로 반환

(12345.6789).toPrecision(); // "12345.6789"
(12345.6789).toPrecision(1); // "1e+4"
(12345.6789).toPrecision(2); // "1.2e+4"
(12345.6789).toPrecision(6); // "12345.6"

 

8. Number.prototype.toString

숫자를 문자열로 변환하여 리턴

인수로 진법을 나타내는 정수를 전달하여 변환할 수 있음

'' 카테고리의 다른 글

[딥다이브] 30. Date  (4) 2024.08.11
[딥다이브] 29. Math  (0) 2024.08.06
[딥다이브] 27. 배열(2)  (0) 2024.08.04
[딥다이브] 27. 배열(1)  (1) 2024.07.29
[딥다이브] 26. ES6 함수의 추가 기능  (0) 2024.07.23
댓글
공지사항