강의 노트/JS

[JS deep dive] Number

매망쩔 2023. 4. 16. 18:53

표준 빌트인 객체인 Number 객체는 생성자 함수이다.

new 연산자와 함꼐 호출하면 Number인스턴스를 생성할 수 있따

Nubmer 생성자 함수에인수를 전달하지 않고 new 연산자와 함께 호출하면 [[NumberData]] 내부 슬롯에 0을 할당한 Number 래퍼 객체를 생성한다.

const numObj = new Number();
console.log(numObj); // [Number: 0]

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

const numObjString = new Number("10");
console.log(numObjString); //[Number: 10]

const numObjNaN = new Number("NAN");
console.log(numObjNaN); //[Number: NaN]

숫자가 아닌 값을 넘기면 숫자로 타입 변경을 하고, 이때 해당 값이 숫자가 아니면 NaN을 [[NumberData]] 내부 슬롯에 할당한다.

 

명시적 타입변경에 의해서 new 연산자를 사용하지 않고 Number생성자 함수를 사용하면 Number인스턴스가 아닌 숫자를 반환한다.

 

Number 프로퍼티

암묵적 타입변화가 없음.

1. Number.EPSILON

ES6에서 도입된 Number.EPSILON은 1과 1보다 큰 숫자 중에서 가장 작은 숫자와의 차이와 같다. 

 

사용 이유 : 부동소수점 산술 연산은 정확한 결과를 기대하기 어렵다. 정수는 2진법으로 오차없이 저장 가능하지만 부동소수점을 표현하기 위해 가정 널리 쓰이는 표준인 IEE 754는 2진법으로 변환했을 때  무한 소수가 되어 미세한 오차가 발생할 수 밖에 없는 구조조 한계를 가짐. 이를 해겱하기 위해서 사용함

 

//부동 소수점 오차
console.log(0.1 + 0.2); //0.30000000000000004
console.log(0.1 + 0.2 === 0.3); //false

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다

 

3. Number.Min.Value

Number.Max_VALUE는 자바스크립트에서 표현할 수 있는 가장 작은 양수 값이다. 이 보다 큰 값은 0다

 

4. Number.MAX_SAFE_INTEGER

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

 

5.Number.MIN_SAFE_INTEGER

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

 

6.Number.POSITIVE_INFINITY

양의 무한대를 나타내는 숫자값 Infinity와 같다

 

7.Number.NEGATIVE_INFINITY

음의 무한대를 나타내는 숫자값 -Infinity와 같다

 

8.Number.NaN

숫자가 아님을 나타내는 숫자값 window.NaN이랑 같다

 

Number 메서드

1. Number.isFitnite

ES6에서 도입된 Number.isFinite 정적 메서드는 인수로 전달된 숫자값이 정상적인 유한수인지 검사하여 그 결과를 불리언 값으로 바노한함. 인수가 NaN이면 언제나 false 반환함

빌트인 전역 함수 isFinite와 차이는 타입변환을 하지 않는 것이다. (숫자가 아닌 값은 언제나 false)

//Number.isFintie
console.log(Number.isFinite("10")); //false

// isFinite는 인수를 숫자로 암묵적 타입 변환함
console.log(isFinite("10")); //true

 

2. Number.isInteger

전달된 숫자값이 정수인지 검사하여 그 결과 값을 불리언 값으로 변환함(암묵적 타입변환 x)

 

3. Number.isNaN

ES6에서 도입된 Number.isNaN 정적 메서드는 인수로 전달된 숫자값이 NaN인지 검사하여 그 결과를 불리언으로 반환함

빌트인 전역함수 isNaN과 달리 암묵적 타입 변환하지 않음

 

4.Number.isSafeInteger

ES6에서 도입됨. 

인수로 전달된 숫자값이 안전한 정수인지 검사하여 그 결과를 불리언 값으로 반환함(암묵적 타입 변환 없음)

 

5. Number.prototype.toExponential

숫자를 지수 표기법으로 반환하여 문자열로 반환한다.  인수로 소수점 이하로 표현할 자릿수를 전달할 수 있다.

숫자 리터럴과 함꼐 Number 프로토타입 메서드로 사용할 경우 에러가 발생한다.(숫자 뒤 .의 의미는 모호하기 때문) 따라서 그룹 연산자를 사용할 것이 권장됨. 

// Number.prototype.toExponential
console.log((77.1234).toExponential()); //7.71234e+1

console.log((77.1234).toExponential(2)); //7.71e+1
// 소수점이 있을 경우는 사용가능하지만 권장 X
console.log((77.1234).toExponential()); //7.71234e+1

// console.log(77.toExponential())//SyntaxError: Invalid or unexpected token

 

6.Number.prototype.toFixed

toFixed 메서드는 숫자를 반올림하여 문자열로 반환한다. 반올림하는 소수점 이하 자릿수를 나타내는 0~20 사이의 정수값을 신수로 전달할 수 있다. 인수를 생략하면 기본값 0 이 지정된다.

//소수점 이하 반올림. 인수를 생략하면 기본값 0이 지정됨
console.log((12345.6789).toFixed()); //12346
console.log((12345.6789).toFixed(2)); //12345.68

7. Number.prototype.toPrecision

인수로 전달받은 전체 자릿수까지유효하도록 나머지 자릿수를 반올림하여 문자열로 반환함. 인수로 전달받은 전체 자릿수로 표현할 수 없는 경우 지수 표기법으로 결과를 반환함

전체 자릿수를 나타내는 0~21사이의 정수값을 인수로 전달할 수 있고, 인수 생략하면 기본값이 0 이다

console.log((12345.6789).toPrecision()); //12345.6789

console.log((12345.6789).toPrecision(2)); //1.2e+4

console.log((12345.6789).toPrecision(5)); //12346

8.Number.prototype.toString

숫자를 문자열로 변환하여 반환함 . 진법을 나타내는 2~36사이의 정수값을 인수로 전달할 수 있고, 인수를 생략하면 기본값 10 진법이 지정됨.

 

 

 

 

 

'강의 노트 > JS' 카테고리의 다른 글

[JS deep dive] Date  (0) 2023.04.17
[JS deep dive] Math  (0) 2023.04.16
[JS deep dive] 배열  (0) 2023.04.14
[JS deep dive] ES6 함수의 추가 기능  (0) 2023.04.11
[JS deep dive] 25장 클래스  (0) 2023.04.10