본문 바로가기

Javascript

[모던 자바스크립트 Deep Dive] 25. Number

Number 생성자 함수

  • 표준 빌트인 객체인 Number 객체는 생성자 함수 객체 → new 연산자와 함께 호출하여 Number 인스턴스 생성 가능
  • Number 생성자 함수에 인수를 전달하지 않고 new 연산자와 함께 호출하면 [[NumberData]] 내부 슬롯에 0을 할당한 Number 래퍼 객체 생성
  • Number 생성자 함수에 인수를 전달하고 new 연산자와 함께 호출하면 [[NumberData]] 내부 슬롯에 인수로 전달받은 숫자를 할당한 Number 래퍼 객체 생성
  • Number 생성자 함수에 숫자가 아닌 값을 전달하면 인수를 숫자로 강제 변환 후  [[NumberData]] 내부 슬롯에 변환된 숫자를 할당한 Number 래퍼 객체 생성 (숫자로 변환할 수 없다면 NaN)
  • new 연산자를 사용하지 않고 Number 생성자 함수를 호출하면 Number 인스턴스가 아닌 숫자 반환
const numObj1 = new Number();
console.log(numObj1); // Number { [[PrimitiveValue]] : 0 }

const numObj2 = new Number('10');
console.log(numObj2); // Number { [[PrimitiveValue]] : 10 }

 

Number  프로퍼티

1. Number.EPSILON

  • 1과 1보다 큰 숫자 중에서 가장 작은 숫자와이 차이와 같음
  •  2.2204460492503130808472633361816 * 10^-16
  • 부동소수점으로 인해 발생하는 오차를 해결하기 위해 사용
function isEqual(a, b) {
  // a 와 b를 뺀 값의 절대값이 Number.EPSILON 보다 작으면 같은 수로 인정
  return Math.abs(a - b) < Number.EPSILON;
}

console.log(isEqual(0.1 + 0.2, 0.3)); // true

 

2. Number.MAX_VALUE

  • 자바스크립트에서 표현할 수 있는 가장 큰 양수 값
  • Number.Max_VALUE 보다 큰 숫자는 Infinity
console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
console.log(Infinity > Number.MAX_VALUE); // true

 

3. Number.MIN_VALUE

  • 자바스크립트에서 표현할 수 있는 가장 작은 양수 값
  • Number.MIN_VALUE 보다 큰 숫자는 0
console.log(Number.MIN_VALUE); // 5e-324
console.log(0 < Number.MIN_VALUE); // true

 

4. Number.MAX_SAFE_INTIGER

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

console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991

 

5. NUMBER.MIN_SAFE_INTIGER

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

console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991

 

6. NUMBER.PORITIVE_INFINITY

양의 무한대를 나타내는 숫자값 (= Infinity)

Number.POSITIVE_INFINITY; // Infinity

 

7. NUMBER.NEGATIVE_INFINITY

음의 무한대를 나타내는 숫자값 (= -Infinity)

Number.NEGATIVE_INFINITY // -Infinity

 

8.NUMBER.NaN

 숫자가 아님(Not-a-Number) 을 타나내는 숫자값 (= window.NaN)

Number.NaN // NaN

 

Number 메서드

1. Number.isFinite

  • 인수로 전달된 숫자값이 정상적인 유한수 Infinity, -Infinity인지 검사하여 결과를 불리언 값으로 반환 (암묵적 타입 변환 X)
  • 빌트인 전역 함수 isFinite 는 전달 받은 인수를 숫자로 암묵적 타입 변환 하여 검사
// 유한수
console.log(Number.isFinite(Number.MAX_VALUE)); // true
console.log(Number.isFinite(Number.MIN_VALUE)); // true
// 무한수
console.log(Number.isFinite(Infinity)); // false
console.log(Number.isFinite(-Infinity)); // false

Number.isFinite(NaN) // false
isFinite(null) // true

 

2. Number.isInteger

  • 인수로 전달된 숫자 값이 정수인지 검사하여 불리언 값으로 반환 (암묵적 타입 변환 X)
console.log(Number.isInteger("123")); // false
console.log(Number.isInteger(false)); // false
console.log(Number.isInteger(Infinity)); // false

3. Number.isNaN

  • 인수로 전달된 숫자 값이 NaN인지 검사하여 그 결과를 불리언 값으로 반환  (암묵적 타입 변환 X)
  • 빌트인 전역 함수 isNaN은 인수를 숫자로 암묵적 타입 변환하여 검사
Number.isNaN(undefined); // false
isNaN(undefined); // true

 

4. Number.isSafeInteger

  • 인수로 전달된 숫자값이 안전한 정수인지 검사하여 그 결과를 불리언 값으로 반환 (암묵적 타입 변환 X)
Number.isSafeInteger(0); // true
Number.isSafeInteger("123"); // false 
Number.isSafeInteger(Infinity); // false

 

5. Number.prototype.toExponential

  • 숫자를 지수 표기법으로 변환하여 문자열로 변환 (지수 표기법 : e 앞에 있는 숫자에 10의 n승을 곱하는 형식으로 수를 나타내는 방식)
  • 숫자 리터럴과 함께 Number 프로토타입 메서드를 사용할 경우 에러 발생
  • 마침표 연산인지 소수점 구분인지 알 수 없으므로 그룹 연산자를 사용할 것을 권장
(77).toExponential(); // 7.7e+1
(77.1234).toExponential(4); // 7.7123e+1

 

6. Number.prototype.toFixed

  • 숫자를 반올림하여 문자열로 반환
(12345.6789).toFixed(); // '12346'
(12345.6789).toFixed(3); // '12345.679'

 

7. Number.prototype.toPrecision

  • 인수로 전달받은 전체 자릿수까지 유효하도록 나머지 자릿수를 반올림하여 문자열로 반환
  • 인수로 전달받은 전체 자릿수로 표현할 수 없는 경우 지수 표기법으로 결과 반환
(12345.6789).toPrecision(); // 12345.6789
(12345.6789).toPrecision(2); // 1.2e+4

 

8. Number.prototype.toString

  • 숫자를 문자열로 변환하여 반환
(16).toString(8); // '20' 8진수 문자열을 반환
(16).toString(16);// '10' 16진수 문자열을 반환