쑤쑤_CS 기록장

23. Number 래퍼 객체 본문

IT 지식 기록/JavaScript 정리

23. Number 래퍼 객체

(╹◡╹)_ 2020. 12. 24. 17:46
728x90

Number 객체

: 원시 타입 number를 다룰 때 유용한 프로퍼티와 메소드를 제공하는 레퍼(wrapper) 객체

  • 변수 또는 객체의 프로퍼티가 숫자를 값으로 가지고 있다면, Number 객체의 별도 생성없이 프로퍼티와 메소드를 사용할 수 있다

  • 원시타입이 wrapper 객체의 메소드를 사용할 수 있는 이유는, 프로퍼티나 메소드를 호출할 때 원시 타입과 연관된 wrapper 객체로 일시적으로 변환되어 프로토타입 객체를 공유하게 되기 때문이다

#1. Number Constructor

Number 객체는 Number() 생성자 함수를 통해 생성할 수 있다.

new Number(value);

var x = new Number(123);
var y = new Number('123');
var z = new Number('str');

console.log(x); // 123
console.log(y); // 123
console.log(z); // NaN
  • 인자가 숫자로 변환될 수 없다면 NaN을 반환한다

  • Number() 생성자 함수를 new 연산자를 붙이지 않아 생성자 함수로 사용하지 않으면, Number 객체를 반환하지 않고 원시 타입의 숫자를 반환한다. (이때 형변환이 발생할 수 있다)

  • 일반적으로 숫자를 사용할 때 원시타입 숫자를 사용한다.

 

#2. Number Property

  • 정적 프로퍼티
  • Number 객체를 생성할 필요 없이 Number.propertyName 형태로 사용한다.

#2.1 Number.EPSILON

  • JavaScript에서 표현할 수 있는 가장 작은 수

  • 부동소수점 비교시 Number.EPSILON을 사용하여 비교 기능을 갖는 함수를 작성한다.

console.log(0.1 + 0.2);        // 0.30000000000000004
console.log(0.1 + 0.2 == 0.3); // false!!!

function isEqual(a, b){
  // Math.abs는 절댓값을 반환한다.
  // 즉 a와 b의 차이가 JavaScript에서 표현할 수 있는 가장 작은 수인 Number.EPSILON보다 작으면 같은 수로 인정할 수 있다.
  return Math.abs(a - b) < Number.EPSILON;
}

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

 

#2.2 Number.MAX_VALUE

  • JavaScript에서 사용 가능한 가장 큰 숫자
  • 더 큰 숫자는 Infinity 이다.

#2.3 Number.MIN_VALUE

  • JavaScript에서 사용 가능한 가장 작은 숫자
  • 0에 가장 가까운 양수 값
  • 더 작은 숫자는 0으로 변환된다.

#2.4 Number.POSITIVE_INFINITY

  • 양의 무한대 Infinity 반환한다.

#2.5 Number.NEGATIVE_INFINITY

  • 음의 무한대 -Infinity 반환한다.

#2.6 Number.NaN

  • 숫자가 아님 을 나타내는 숫자값
  • window.NaN 프로퍼티와 같다

 

#3. Number Method

#3.1 Number.isFinite(testValue:number):boolean

  • 매개변수에 전달된 값이 정상적인 유한수인지 검사하여 결과를 Boolean으로 반환한다.

  • 검사 전에 인수를 변환하지 않는다.
    → 숫자가 아닌 인수가 주어졌을 때 반환값 = false

#3.2 Number.isInteger(testValue:number):boolean

  • 매개변수에 전달된 값이 정수인지 검사하여 결과를 Boolean으로 반환한다.
  • 검사전에 인수를 숫자로 변환하지 않는다

#3.3 Number.isNaN(testValue:number):boolean

  • 매개변수에 전달된 값이 NaN인지 검사하여 결과를 Boolean으로 반환한다.
  • 인수를 변환하지 않는다.
    숫자가 아닌 인수가 주어졌을 때 반환값 = false

 

#3.4 Number.isSafeInteger(testValue:number):boolean

  • 매개변수에 전달된 값이 안전한 정수인지 검사하여 결과를 Boolean으로 반환한다.
  • 안전한 정수값 : -(253 - 1)와 253 - 1 사이의 정수값
  • 검사전에 인수를 숫자로 변환하지 않는다

#3.5 Number.prototype.toExponential(fractionDigits?:number):string

  • 대상을 지수 표기법으로 변환하여 문자열로 반환한다.
/**
 * @param {number} [fractionDigits] - 0~20 사이의 정수값으로 소숫점 이하의 자릿수를 나타낸다. 옵션으로 생략 가능하다.
 * @return {string}
 */
numObj.toExponential([fractionDigits])

var numObj = 77.1234;

console.log(numObj.toExponential());  // logs 7.71234e+1
console.log(numObj.toExponential(4)); // logs 7.7123e+1
console.log(numObj.toExponential(2)); // logs 7.71e+1
console.log(77.1234.toExponential()); // logs 7.71234e+1
console.log(77.toExponential());      // SyntaxError: Invalid or unexpected token
console.log(77 .toExponential());     // logs 7.7e+1

 

정수 리터럴과 함께 메소드를 사용할 경우 에러가 발생한다.

  • 숫자 뒤의 .은 의미가 모호하다.
    소수 구분 기호일 수도 있고 객체 프로퍼티에 접근하기 위한 마침표 표기법(Dot notation)일 수도 있다. 따라서 자바스크립트 엔진은 숫자 뒤의 
    .을 부동 소수점 숫자의 일부로 해석한다. 그러나 77.toString()은 숫자로 해석할 수 없으므로 에러(SyntaxError: Invalid or unexpected token)가 발생한다.
  • 정수 리터럴과 함께 메소드를 사용하는 경우 아래와 같이 작성한다.
    (77).toString(); // '77'

#3.6 Number.prototype.toFixed(fractionDigits?:number):string

  • 매개변수로 지정된 소숫점자리를 반올림하여 문자열로 반환한다.
/**
 * @param {number} [fractionDigits] - 0~20 사이의 정수값으로 소숫점 이하 자릿수를 나타낸다. 기본값은 0이며 옵션으로 생략 가능하다.
 * @return {string}
 */
numObj.toFixed([fractionDigits])

var numObj = 12345.6789;

// 소숫점 이하 반올림
console.log(numObj.toFixed());   // '12346'
// 소숫점 이하 1자리수 유효, 나머지 반올림
console.log(numObj.toFixed(1));  // '12345.7'
// 소숫점 이하 2자리수 유효, 나머지 반올림
console.log(numObj.toFixed(2));  // '12345.68'
// 소숫점 이하 3자리수 유효, 나머지 반올림
console.log(numObj.toFixed(3));  // '12345.679'
// 소숫점 이하 6자리수 유효, 나머지 반올림
console.log(numObj.toFixed(6));  // '12345.678900'

 

 

#3.7 Number.prototype.toPrecision(precision?:number):string

  • 매개변수로 지정된 전체 자릿수까지 유효하도록 나머지 자릿수를 반올림하여 문자열로 반환한다.

  • 지정된 전체 자릿수를 표현할 수 없는 경우 지수 표기법으로 결과를 반환한다.

/**
 * @param {number} [precision] - 1~21 사이의 정수값으로 전체 자릿수를 나타낸다. 옵션으로 생략 가능하다.
 * @return {string}
 */
numObj.toPrecision([precision])

var numObj = 15345.6789;

// 전체자리수 유효
console.log(numObj.toPrecision());   // '12345.6789'
// 전체 1자리수 유효, 나머지 반올림
console.log(numObj.toPrecision(1));  // '2e+4'
// 전체 2자리수 유효, 나머지 반올림
console.log(numObj.toPrecision(2));  // '1.5e+4'
// 전체 3자리수 유효, 나머지 반올림
console.log(numObj.toPrecision(3));  // '1.53e+4'
// 전체 6자리수 유효, 나머지 반올림
console.log(numObj.toPrecision(6));  // '12345.7'

 

#3.8 Number.prototype.toString(radix?:number):string

  • 숫자를 문자열로 변환하여 반환한다.
/**
 * @param {number} [radix] - 2~36 사이의 정수값으로 진법을 나타낸다. 옵션으로 생략 가능하다.
 * @return {string}
 */
numObj.toString([radix])

var count = 10;
console.log(count.toString());   // '10'
console.log((17).toString());    // '17'
console.log(17 .toString());     // '17'
console.log((17.2).toString());  // '17.2'

var x = 16;
console.log(x.toString(2));       // '10000'
console.log(x.toString(8));       // '20'
console.log(x.toString(16));      // '10'

console.log((254).toString(16));  // 'fe'
console.log((-10).toString(2));   // '-1010'
console.log((-0xff).toString(2)); // '-11111111'

 

#3.9 Number.prototype.valueOf(fractionDigits?:number):string

  • Number 객체의 원시 타입 값 (primitive value)을 반환한다.
var numObj = new Number(10);
console.log(typeof numObj); // object

var num = numObj.valueOf();
console.log(num);           // 10
console.log(typeof num);    // number
728x90
Comments