본문 바로가기

Today I Learned

모던 자바스크립트 Deep Dive 28장 Number

원시타입이기 때문에 Number 래퍼 객체를 생성한다.

Number 프로퍼티

Number.EPSILON (엡실론)

1과 1보다 큰 값 중에서 가장 작은 값의 차이. 부동소수점으로 인한 오차 문제를 해결하기 위해 도입되었다.

0.1 + 0.2;         // -> 0.30000000000000004
0.1 + 0.2 === 0.3; // -> false

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_SAFE_INTEGER

자바스크립트에서 안전하게 표현할 있는 가장 정수값을 나타낸다.
자바스크립트에서는 표현할 있는 숫자에 한계가 있는데, Number 타입 안에서 나타낼 있는 가장 수를 가리킨다IEEE 754 표기 방법으로 나타낼 있는 숫자.

Number.MAX_SAFE_INTEGER; // -> 9007199254740991

 

Number 메서드

Number.isFinite

유한수인지 판단하는 메서드이다. 빌트인 전역 함수인 isFinite 차이가 있다. isFinite 인수를 숫자로 암묵적 타입 변환하나, Number.isFinite 그러지 않는다. 숫자가 아닌 인수를 받았을 Number.isFinite 반환값은 언제나 false이다.

// Number.isFinite는 인수를 숫자로 암묵적 타입 변환하지 않는다.
Number.isFinite(null); // -> false

// isFinite는 인수를 숫자로 암묵적 타입 변환한다. null은 0으로 암묵적 타입 변환된다.
isFinite(null); // -> true

 

Number.isSafeInteger

인수가 안전한 정수인지 판단하는 메서드. 암묵적 타입 변환하지 않는다. 안전한 수란 IEEE 754 표기 방법으로 나타낼 있는 숫자.

// 0은 안전한 정수이다.
Number.isSafeInteger(0); // -> true
// 1000000000000000은 안전한 정수이다.
Number.isSafeInteger(1000000000000000); // -> true

// 10000000000000001은 안전하지 않다.
Number.isSafeInteger(10000000000000001); // -> false
// 0.5은 정수가 아니다.
Number.isSafeInteger(0.5); // -> false
// '123'을 숫자로 암묵적 타입 변환하지 않는다.
Number.isSafeInteger('123'); // -> false
// false를 숫자로 암묵적 타입 변환하지 않는다.
Number.isSafeInteger(false); // -> false
// Infinity/-Infinity는 정수가 아니다.
Number.isSafeInteger(Infinity); // -> false