JavaScript/기본 내장 객체

숫자와 Number 객체

유혁스쿨 2022. 1. 19. 17:31
728x90
반응형

자바스크립트에서 숫자 데이터는 다음과같이 변수에 저장하여 사용한다.

var number = 273;

 

var numberLiteral1 = 273;
var numberLiteral2 = 273;

console.log('리터럴숫자1 == 리터럴숫자2 : ',numberLiteral1 == numberLiteral2);
console.log('타입 체크 : ',typeof numberLiteral1, typeof numberLiteral2)
console.log('리터럴숫자1 === 리터럴숫자2 : ',numberLiteral1 === numberLiteral2);

 

var numberLiteral = 273;
var numberConstructor = new Number(273);

console.log('리터럴숫자 == 생성자숫자 : ',numberLiteral == numberConstructor);
console.log('타입 체크 : ',typeof numberLiteral, typeof numberConstructor)
console.log('리터럴숫자 === 생성자숫자 : ',numberLiteral === numberConstructor);

위의 결과에서 볼 수 있듯 리터럴변수에 숫자를 저장한 변수의 타입은 Number이고, Number생성자 함수에 숫자담아 저장한 변수의 타입은 Object이다.

var numberLiteral = 273;
var numberConstructor = new Number(273);

console.log(numberLiteral, numberConstructor);

숫자 객체를 생성하는 new Number(숫자) 은 숫자 반환하는게 아니라 Number객체의 참조 주소(메모리 주소)를 반환하기 때문이다.

더 풀어서 말하자면 일반 리터럴 변수에 저장된 숫자숫자 그 자체의 상태로 메모리영역에 저장되지만

Number객체의 생성자를 사용한 숫자Object타입으로 (업캐스팅) 메모리영역에 저장되는것이다.

때문에 둘은 다른 형태의 타입이라고 말할 수 있다.

 

다음과 같이 Number객체는 메서드 valueOf( ) 를 이용해 숫자 원형으로 변환할 수 있다.

var numberLiteral = 273;
var numberConstructor = new Number(273);

console.log(numberLiteral, numberConstructor.valueOf());

숫자Number 객체는 모두 동일하게 Number객체의 속성과 메서드를 사용할 수 있다.

이말은즉 일반 리터럴 숫자Number객체에서 관리가 가능하다는 것이다.

 

Number 객체의 메서드

toExponential( ) : 숫자를 지수 표시로 나타낸 문자열을 리턴한다.

toFixed( ) : 숫자를 고정 소수점 표시로 나타낸 문자열을 리턴한다.

toPrecision( ) : 숫자를 길이에 따라 지수 표시 또는 고정 소수점 표시로 나타낸 문자열을 리턴한다.

 

세 메서드가 모두 비슷한 기능을 수행하므로 toFixed( ) 메서드에 대해 살펴본다.

 

var number = 273.5210332;

var output = '';
output += number.toFixed(1) + '\n';
output += number.toFixed(4);
console.log(output);

 toFixed(1)은 소수점 1자리 toFixed(4)는 소수점 4자리까지 잘라 출력된다.

따라서 toFixed(소숫점자릿수) 메서드는 소수점 몇 번째 자리까지 자르는 메서드이다.

 

숫자 자료형은 리터럴이든 Number객체든 모두 변수에 저장하지않고 직접 접근하여 메서드를 사용할 수 있다.

다음과 같이 코드를 구현해본다.

var output = '';
output += 273.5210332.toFixed(1) + '\n';
output += 273.5210332.toFixed(4);
console.log(output);

 

Number 생성자 함수 속성

function Constructor () { };
Constructor.property = 273;
Constructor.method = function () { };

console.log(Constructor.property);

코드를 실행하면 정상적으로 property속성에 저장된 273을 출력한다.

이렇게 함수는 속성과 메서드를 가질 수 있다.

 

Number 생성자 함수도 속성과 메서드가 존재하며 다음과 같은 종류의 속성들을 갖는다

MAX_VALUE : 자바스크립트의 숫자가 나타낼 수 있는 최대의 숫자

MIN_VALUE : 자바스크립트의 숫자가 나타낼 수 있는 최소의 숫자

NaN : 자바스크립트의 숫자로 나타낼 수 없는 숫자

POSITIVE_INFINITY : 양의 무한대

NEGATIVE_INFINITY : 음의 무한대

 

var number = Number.MAX_VALUE + 1;

console.log(number);

자바스크립트로 나타낼 수 있는 최대 숫자에 1을 더했음에도 오류없이 실행되었다.

 

이 결과는 실제로 1을 더한것이 아니다.

지수 표기로 전환됐을 때는 적어도 아래 코드만큼 더해야 더해진다.

 

var addNumber = Number('0.0000000000000001e+308');
var number = Number.MAX_VALUE + addNumber;

console.log(number);

코드를 실행하였을 때 출력되는 Infinity는 무한대라는 뜻으로 자바스크립트는 1.7976931348623157e +308까지 나타낼 수 있기 때문에 1.7976931348623157e +308 부터는 무한한 양의 숫자로 인식한다.

728x90
반응형