-
Section 6. 자바스크립트 Number 객체자바스크립트 2023. 3. 31. 10:44
I. 생성자 함수
const numObj1 = new Number(); const numObj2 = new Number(123); const numObj3 = new Number(-123.45); console.log(numObj1, numObj2, numObj3);//Number {0} Number {123} Number {-123.45}
String 생성자 함수에 이어서 Number 생성자 함수를 살펴보면 위와 같다.
인자가 없을 시 0이 반환되는 것을 볼 수 있다.
Number 생성자 함수도 PrimitiveValue를 살펴보면 다음과 같다.
모두 PrimitiveValue에 원시값이 저장되는 것을 알 수 있다.
console.log( numObj1.valueOf(), numObj2.valueOf(), numObj3.valueOf() ); //0 123 -123.45
valueOf를 사용해서 원시값을 반환했다.
특정 숫자값으로 인식되는 것들을 살펴보면 다음과 같다.
console.log( new Number('-123.4567'), new Number('Infinity'), new Number(true), new Number(false) ); //Number {-123.4567} Number {Infinity} Number {1} Number {0}
NaN
console.log( new Number('1/2'), new Number('123ABC'), new Number('ABC'), new Number('{a: 1, b: 2}'), new Number([1, 2, 3]) ); //Number {NaN} Number {NaN} Number {NaN} Number {NaN} Number {NaN}
new 없이 사용하면 String과 마찬가지로 Number 함수는 주어진 인자를 숫자로 변환하여 반환한다.
const num1 = Number('123'); const num2 = Number('-123.45'); const num3 = Number(true); const num4 = Number(false); const num5 = Number(null); console.log(typeof num1, num1); //number 123 console.log(typeof num2, num2); //number -123.45 console.log(typeof num3, num3); //number 1 console.log(typeof num4, num4); //number 0 console.log(typeof num5, num5); //number 0
II. 정적 프로퍼티
1. EPSILON
(Number 형에서 표현 가능한 1보다 큰 가장 작은 수) - 1 한 것을 말한다.
부동소수점으로 인한 계산 오차 문제 해결에 사용한다.
console.log(Number.EPSILON); //2.220446049250313e-16 console.log(0.1 + 0.2); //0.30000000000000004 console.log((0.1 + 0.2) - 0.3 < Number.EPSILON) //true
2. MAX_VALUE, MIN_VALUE
자바스크립트에서 표현 가능한 가장 큰 수와 작은 수를 반환하는 프로퍼티이다.
console.log(Number.MAX_VALUE); //1.7976931348623157e+308 console.log(Number.MIN_VALUE); //5e-324
3. MAX_SAFE_INTEGER, MIN_SAFE_INTEGER
자바스크립트의 부동소수점 체계에서 안정적으로 나타낼 수 있는 가장 큰 수와 작은 정수를 반환하는 프로퍼티이다.
console.log(Number.MAX_SAFE_INTEGER); //9007199254740991 console.log(Number.MIN_SAFE_INTEGER); //-9007199254740991
더 큰 정수도 표현 자체는 가능하지만 불안정하다. 안전하게 더 큰 정수를 표현하려면 BigInt 타입으로 표현해야 한다.
4. POSITIVE_INFINITY, NEGATIVE_INFINITY
양과 음의 Infinity를 반환하는 프로퍼티이다.
console.log(Number.POSITIVE_INFINITY); //Infinity console.log(Number.NEGATIVE_INFINITY); //-Infinity
5. NaN
전역 객체(globalThis)의 NaN과 같은 값을 반환하는 프로퍼티이다.
console.log(Number.NaN); //NaN
III. 전역 객체에도 있는 메서드들
a. 동일하지 않음 : isFinite, isNaN
console.log( isFinite(null), // null을 0으로 변환 Number.isFinite(null) ); //true false
console.log( isNaN('abc'), // 숫자타입의 NaN으로 변환 Number.isNaN('abc') // 숫자타입 자체가 아니므로 false ); //true false
중요한 것은 전역 객체 (globalThis)의 해당 메소드와의 차이는 암묵적 타입 변환을 하지 않는다는 것
b. 동일함 : parseInt, parseFloat
각각 전역의 동명 메서드들을 가리킨다. parseInt, parseFloat
console.log( Number.parseInt('123.4567'), Number.parseFloat('123.4567') ); //123 123.4567
2. (안전한) 정수 여부 확인 isInteger, isSafeInteger
console.log( Number.isInteger(123), Number.isInteger(123.45) ); //true false
console.log( // 암묵적 변환 하지 않음 Number.isInteger('123'), Number.isInteger(true), Number.isInteger(Infinity) ); //false false false
console.log( Number.isSafeInteger(123), Number.isSafeInteger(123.45) ); //true false
console.log( Number.isSafeInteger(Number.MAX_SAFE_INTEGER), Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) ); //true false
IV. 인스턴스 메서드
값 자체에서 호출시 괄호로 감싸야 한다. 왜냐하면 소수점과 구분이 불가능하기 때문이다.
1. toExponential
지수 표기법으로 나타내는 문자열을 반환하는 메서드이다.
const numInExp = (123.456789).toExponential(); console.log( typeof(numInExp), numInExp ); //string 1.23456789e+2
인자로 자릿수를 제한할 수 있다.
// 인자로 자릿수 제한 console.log( (123.456789).toExponential(2), (123.456789).toExponential(4), (123.456789).toExponential(6) ); //1.23e+2 1.2346e+2 1.234568e+2
2. toFixed
최대 인자값으로 주어진 정수 (0~20)만큼 소수점 이하를 반올림하여 문자열로 반환하는 메서드이다.
console.log( // 인자가 없으면 0을 받은 것과 같음 (111.234567).toFixed(), (111.234567).toFixed(0) ); //111 111 console.log( (111.234567).toFixed(1), (111.234567).toFixed(2) ); //111.2 111.23 console.log( // 반올림 (111.234567).toFixed(3), (111.234567).toFixed(4) ); //111.235 111.2346
3. toPrecision
반올림과 지수 표기법을 사용하여 문자열을 반환하는 메서드이다.
console.log( // 인자가 없으면 toString처럼 그대로 문자열로 반환 (1234.56789).toPrecision() ); //1234.56789
인자가 정수부 자릿수보다 적으면 지수로 반환한다.
console.log( (1234.56789).toPrecision(1), (1234.56789).toPrecision(2), (1234.56789).toPrecision(3) ); /1e+3 1.2e+3 1.23e+3
// 반올림 console.log( (1234.56789).toPrecision(4), (1234.56789).toPrecision(6), (1234.56789).toPrecision(8) ); //1235 1234.57 1234.5679
4. toString
문자열 값을 반환하는 메서드이다.
인자 2~36가 주어지면 해당 수의 진수로 표현한다.
console.log( (11).toString(), (11).toString(2), (11).toString(8), (11).toString(16) ); //11 1011 13 b
'자바스크립트' 카테고리의 다른 글
Section 6. 자바스크립트 Date 객체 (0) 2023.03.31 Section 6. 자바스크립트 Math 객체 (0) 2023.03.31 Section 6. 자바스크립트 String 객체 (0) 2023.03.30 Section 6. 자바스크립트 빌트인 전역 프로퍼티와 함수 (0) 2023.03.30 Section 6. 자바스크립트 전역 객체와 표준 빌트인 객체 (0) 2023.03.30