일반적으로 원시값은 원시값 그대로 사용된다.
문자열, 숫자, 불린, 심볼의 메서드와 프로퍼티에 접근할 수 있으며, 이때 원시 래퍼 객체(object wrapper) 가 만들어진다.
let str = "Hello";
alert( str.toUpperCase() ); // HELLO
이를 통해서 원시값을 가볍게 유지하면서 메서드를 호출할 수 있다.
[!warning] String/Number/Boolean를 생성자로서 사용하는 것은 피하자. 자바스크립트에서도 하위 호환성을 위해 래퍼 클래스를 통해 인스턴스를 만들 수 있는 기능을 남겨 두었었다. 하지만 이는 몇몇 상황에서 혼란을 야기할 수 있다. (결국에는 객체를 만드는 것이지 원시값을 만드는 것이 아니므로)
alert( typeof 0 ); // "number" alert( typeof new Number(0) ); // "object"!객체는 논리 평가 시 항상 참을 반환하기 때문에, 아래 예시에서 얼럿창은 무조건 열린다.
let zero = new Number(0); if (zero) { // 객체는 어떠한 상황에도 참이다. alert( "그런데 여러분은 zero가 참이라는 것에 동의하시나요!?!" ); }new를 붙이지 않고 String / Number / Boolean을 사용시 형의 원시값(문자열, 숫자, 불린 값)으로 바꿔준다.
예시: let num = Number("123"); // 문자열을 숫자로 바꿔줌
[!info] null/undefined는 메서드가 없습니다. null과 undefined의 원시값(null/undefined)은 "래퍼 객체"도 없고, 메서드도 제공하지 않는다.
일반적인 숫자는 '배정밀도 부동소수점 숫자(double precision floating point number)'로 알려진 64비트 형식의 IEEE-754에 저장된다.
임의의 길이를 가진 정수는 BigInt 숫자로 나타낼 수 있다.
let billion = 1000000000; //10억
let billion = 1bn;