자바스크립트 유형에는 원시형(string, number, boolean, bigInt, symbol, null, undefined) 7가지와 객체 object가 있다.
객체는 많은 프로퍼티를 가질수 있기때문에 그만큼 시스템자원을 소모하는 단점이 있다.
그에반해 원시형은 메모리에 해당 값만 가지고있기 때문에 시스템자원측면에서는 효율적이다.
문자열은 오로지 데이터만 가지고 있으므로 문자열연산을 하기위해서는 String내장객체의 메소드를 사용해야 한다.
String class 메소드를 사용하기 위해서는 String객체를 만들고 문자열을 인자로 전달하는 방식을 취해야하는데 불편다.
그래서 자바스크립트는 원시형데이터의 원시래퍼객체를 지원하여 원시형에서 바로 원시래퍼객체의 메소드를 사용할 수있도록 했다.
let str = "Hello";
alert( str.toUpperCase() ); // HELLO
alert( "Hello".toUpperCase() ); // HELLO
str.toUpperCase();
속성접근자가 원시형데이터에 접근하면 임시 원시래퍼객체가 생성되고 toUpperCase프로퍼티를 원시래퍼객체에 연결한후 원시값을 인자로 사용하여 결과값을 반환하고 임시 원시래퍼객체는 소멸된다.
let num = Number("123");
let numObject = new Number("123");
String, Number, Boolean은 원시래퍼객체의 생성자함수(클래스)로 다른 생성자함수(클래스 Date, Array..)와 달리 new지시자 없이 사용되면 형변환된 원시값을 반환하는 함수로 작동한다.
let str = "Hello";
str.test = 5;
alert(str.test);
str은 원시문자열이므로 str. 점연산자가 사용되면 엔진은 문자열원시래퍼객체를 생성한다.
생성된 원시래퍼객체에 test프로퍼티를 추가하고 값을 할당한다.
할당연산이 완료되면 원시래퍼객체는 역활을 다했으므로 소멸된다.
alert(str.test);에서 str.에 다시 원시래퍼객체가 생성되지만 이객체에는 test프로퍼티가 없으므로 undefined가 반환된다.