표준 빌트인 객체인 Number는 원시 타입인 숫자를 다룰 때 유용한 프로퍼티와 메서드를 제공한다.

Number 생성자 함수

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

→ 따라서 new 연산자와 함께 호출하여 Number 인스턴스를 생성할 수 있다.

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

const numObj = new Number();
console.log(numObj); // Number {[[PrimitiveValue]]: 0} 
// -> [[NumbarData]] (ES5 에서는 [[Number]]를 [[PrimitiveValue]]라 불렀다.)

Number 생성자 함수의 인수로 숫자를 전달하면서 new 연산자와 함께 호출하면 [[NumberData]] 내부 슬롯에 인수로 전달 받은 숫자를 할당한 Number 래퍼 객체를 생성한다.

const numObj = new Number(10);
console.log(numObj); // Number {[[PrimitiveValue]]: 10}

Number 생성자 함수의 인수로 숫자가 아닌 값을 전달하면 인수를 숫자로 강제 변환한 후, [[NumberData]] 내부 슬롯에 변환된 숫자를 할당한 Number 래퍼 객체를 생성한다.

let numObj = new Number('10');
console.log(numObj); // Number {[[PrimitiveValue]]: 10}

인수를 숫자로 변환할 수 없다면 NaN을 [[NumberData]] 내부 슬롯에 할당한 Number 래퍼 객체를 생성한다.

numObj = new Number('Hello');
console.log(numObj); // Number {[[PrimitiveValue]]: NaN}

new 연산자 없이 Number 생성자 함수를 호출하면 Number 인스턴스가 아닌 숫자를 반환한다. 이를 이용하여 명시적으로 타입 변환하기도 한다.