Search

25장 Number

대분류
언어
서적
소분류
JS DeepDive
태그
Number
MAX_VALUE
MIN_VALUE
INFINITY
최종 편집 일시
2024/10/27 15:39
생성 일시
2024/02/08 00:11
14 more properties

Number 생성자 함수

const numObj = new Number(); console.log(numObj); // Number {[[PrimitiveValue]]: 0} numObj = new Number(10); console.log(numObj); // Number {[[PrimitiveValue]]: 10} numObj = new Number('10'); console.log(numObj); // Number {[[PrimitiveValue]]: 10} numObj = new Number('Hello'); console.log(numObj); // Number {[[PrimitiveValue]]: NaN}
TypeScript
복사
원시타입 숫자 다룰 때 유용한 프로퍼티와 메서드 제공
생성자 함수이므로 new 연산자와 함께 호출하여 사용하면 Number 인스턴스를 생성할 수 있고 [[NumberData]] 내부 슬롯에 값을 가지고 있는 래퍼 객체 생성 가능
ES5 에서는 [[NumberData]] 슬롯을 [[PrimitiveValue]]라고 지칭
인수를 숫자로 변환할 수 없다면 NaN을 내부 슬롯에 할당
new 를 사용하지 않고 Number만 호출할 경우 인스턴스가 아닌 숫자를 반환하여 명시적으로 타입 변환을 하는데 이용
// 문자열 타입 => 숫자 타입 Number('0'); // -> 0 Number('-1'); // -> -1 Number('10.53'); // -> 10.53 // 불리언 타입 => 숫자 타입 Number(true); // -> 1 Number(false); // -> 0
TypeScript
복사

Number 프로퍼티

Number.EPSILON

1과 1보다 큰 숫자 중에서 가장 작은 숫자와의 차이와 동일
부동 소수점으로 인해 발생하는 오차를 해결하기 위해 사용
function isEqual(a, b) { // a와 b를 뺀 값의 절대값이 Number.EPSILON보다 작으면 같은 수로 반환 return Math.abs(a-b) < Number.EPSILON; } isEqual(0.1 + 0.2, 0.3) // -> true
TypeScript
복사

Number.MAX_VALUE

Number.MAX_VALUE; // -> 1.7976931348623157e+308 Infinity > Number.MAX_VALUE; // -> true
TypeScript
복사
JS에서 표현할 수 있는 가장 큰 양수 수 값

Number.MIN_VALUE

Number.MIN_VALUE; // -> 5e-324 Number.MIN_VALUE > 0; // -> true
TypeScript
복사
JS에서 표현할 수 있는 가장 작은 양수 값

Number.MAX_SAFE_INTEGER

Number.MAX_SAFE_INTEGER; // -> 9007199254740991
JS에서 안전하게 표현할 수 있는 가장 큰 정수 값

Number.MIN_SAFE_INTEGER

Number.MIN_SAFE_INTEGER; // -> -9007199254740991
JS에서 안전하게 표현할 수 있는 가장 작은 정수 값

Number.INFINITY

Number.POSITIVE_INFINITY; // -> Infinity
양의 무한대, Infinity와 동일

Number.NEGATIVE_INFINITY

Number.NEGATIVE_INFINITY; // -> -Infinity
음의 무한대, -Infinity와 동일

Number.NaN

Number.NaN; // -> NaN
숫자가 아님을 나타내는 숫자 값
Number.NaNwindow.NaN과 동일

Number 메서드

Number.isFinite

// 인수가 정상적인 유한수이면 true를 반환 Number.isFinite(0); // -> true Number.isFinite(Number.MAX_VALUE); // -> true Number.isFinite(Number.MIN_VALUE); // -> true // 인수가 무한수이면 false를 반환 Number.isFinite(Infinity); // -> false Number.isFinite(-Infinity); // -> false Number.isFinite(NaN); // -> false
TypeScript
복사
인수로 전달된 숫자 값이 정상적인 유한 수 이면 true, Infinity 또는 -Infinity, 숫자가 아닌 값은 모두 false로 반환
암묵적 타입 변환을 안한다는 점에서 isFinite() 빌트인 전역함수와 다름
// Number.isFinite는 인수를 숫자로 암묵적 타입 변환하지 않는다. Number.isFinite(null); // -> false // isFinite는 인수를 숫자로 암묵적 타입 변환한다. null은 0으로 암묵적 타입 변환된다. isFinite(null); // -> true
TypeScript
복사

Number.isInteger

// 인수가 정수이면 true를 반환 Number.isInteger(0) // -> true Number.isInteger(123) // -> true Number.isInteger(-123) // -> true // 0.5는 정수가 아니다. Number.isInteger(0.5) // -> false // '123'을 숫자로 암묵적 타입 변환하지 않는다. Number.isInteger('123') // -> false // false를 숫자로 암묵적 타입 변환하지 않는다. Number.isInteger(false) // -> false // Infinity/-Infinity는 정수가 아니다. Number.isInteger(Infinity) // -> false Number.isInteger(-Infinity) // -> false
TypeScript
복사
전달된 숫자 값이 정수인지 검사하여 불리언 값 반환하고 암묵적 타입 변환 X

Number.isNaN

// 인수가 NaN이면 true를 반환한다. Number.isNaN(NaN); // -> true
TypeScript
복사
ES6에서 도입된 메서드로 인수가 NaN인지 검사하여 그 결과를 불리언 값으로 반환함. --> 일반적인 숫자 인수도 false를 반환한다. ex) Number.isNaN(1) // false
isNaN은 숫자로 암묵적 타입변환을 하여 검사하지만 Number.isNaN은 타입변환을 하지 않는다. --> 숫자가 아닌 인수의 반환값은 언제나 false이다.
// Number.isNaN은 인수를 숫자로 암묵적 타입 변환 X Number.isNaN(undefined); // -> false // isFinite는 인수를 숫자로 암묵적 타입 변환, undefined는 NaN으로 암묵적 타입 변환 isNaN(undefined); // -> true
TypeScript
복사

Number.isSafeInteger

// 0은 안전한 정수 Number.isSafeInteger(0); // -> true // 1000000000000000은 안전한 정수 Number.isSafeInteger(1000000000000000); // -> true // 10000000000000001은 안전 X Number.isSafeInteger(10000000000000001); // -> false // 0.5은 정수 X Number.isSafeInteger(0.5); // -> false // '123'을 숫자로 암묵적 타입 변환 X Number.isSafeInteger('123'); // -> false // false를 숫자로 암묵적 타입 변환 X Number.isSafeInteger(false); // -> false // Infinity/-Infinity는 정수 X Number.isSafeInteger(Infinity); // -> false
TypeScript
복사
안전한 정수 값인지 검사하여 그 결과를 불리언 값으로 반환 --> 암묵적 타입 변환 X
(2 ^ 53-1) ~ 2 ^ 53 - 1 사이의 정수 값

Number.prototype.toExponential

(77.1234).toExponential(); // -> "7.71234e+1" (77.1234).toExponential(4); // -> "7.7123e+1" (77.1234).toExponential(2); // -> "7.71e+1"
TypeScript
복사
숫자를 지수 표기법으로 변환하여 문자열로 반환
인수는 표현할 자리수를 의미 --> 인수 미전달 시 모든 자리수 표현
e 앞에 있는 숫자에 10의 n승을 곱하는 형식
숫자 뒤의 .은 의미가 모호하기 때문에 ()와 같은 그룹 연산자를 사용할 것을 권장

Number.prototype.toFixed

// 소수점 이하 반올림. 인수를 생략하면 기본값 0이 지정 (12345.6789).toFixed(); // -> "12346" // 소수점 이하 1자리수 유효, 나머지 반올림 (12345.6789).toFixed(1); // -> "12345.7" // 소수점 이하 2자리수 유효, 나머지 반올림 (12345.6789).toFixed(2); // -> "12345.68" // 소수점 이하 3자리수 유효, 나머지 반올림 (12345.6789).toFixed(3); // -> "12345.679"
TypeScript
복사
숫자를 반올림하여 문자열로 반환
인수 생략 시 기본 값 0 이 지정되고 소수점 이하 반올림
(12345.6789).toFixed(); // "123456" (12345.6789).toFixed(1); // "12345.7"
TypeScript
복사

Number.prototype.toPrecision

인수로 전달받은 전체 자릿수 까지 유효하도록 나머지 자릿수를 반올림하여 문자열로 반환
0~21사이의 정수값을 인수로 받을 수 있고 인수 생략시 기본값 0이 지정되고 이 경우 전체 자릿수가 유효
// 전체 자리수 유효. 인수를 전달하지 않으면 기본값 0이 전달된다. (12345.6789).toPrecision(); // -> "12345.6789" // 전체 1자리수 유효, 나머지 반올림 (12345.6789).toPrecision(1); // -> "1e+4" // 전체 2자리수 유효, 나머지 반올림 (12345.6789).toPrecision(2); // -> "1.2e+4" // 전체 6자리수 유효, 나머지 반올림 (12345.6789).toPrecision(6); // -> "12345.7"
TypeScript
복사

Number.prototype.toString

숫자를 문자열로 변환하여 반환
진법을 나타내는 2~36 사이의 정수값을 인수로 전달할 수 있고 기본값은 10진법
// 10진수 문자열 반환 (10).toString(); // -> "10" // 2진수 문자열 반환 (16).toString(2); // -> "10000" // 8진수 문자열을 반환한다. (16).toString(8); // -> "20" // 16진수 문자열을 반환한다. (16).toString(16); // -> "10"
TypeScript
복사