var str = "kong";
var strWrap = new String('kong');
그러면 여기서 한가지 내용을 더 알려드릴게요.
JavaScript에서 원시 값(primitive, 또는 원시 자료형)이란 객체가 아니면서 메서드도 가지지 않는 데이터입니다.
위에 말처럼 자바스크립트에서는 원시 값은 객체가 아니니깐 어떠한 메서드(객체 내부에 선언된 함수)를 가지지 않는다라고 합니다.
아래 코드처럼 한번 실행해보겠습니다.
str.length;
str.charAt(0);
strWrap.length;
strWrap.charAt(0);
위 두개의 코드를 실행하게된다면 아래처럼 나올것입니다.
str.length
결과 : 4
str.charAt(0);
결과 : "k"
strWrap.length
결과 : 4
strWrap.charAt(0);
결과 : "k"
typeof str // str 타입은 "string"
"string"
typeof strWrap // strWrap 타입 "객체"
"object"
그러면... 변수 str 은 객체가 아니면서 어떠한 메서드를 가지고 있지 않은데 어떻게 length 와 charAt() 를 객체 접근자(.) 이용하여 사용할 수 있으며 자바스크립트에서는 어떠한 경고,오류 메세지가 나오지 않는것인가??
var str = "kong";
str.firstName = "woojeong"; // 오토박싱 과정 발생
str.firstName; // 이전에 만들어진 Wrapper 객체는 지워진 상태
결과 : undefined
정리하자면 오토박싱과정에서 임시 Wrapper 객체는 말그대로 임시 여서 프로퍼티나 메서드 사용 끝나면 해당 임시 Wrapper 객체는 지워지므로 동일한 프로퍼티에 접근할때는 이전에 값은 이미 지원진 상태 입니다.
var str = "string";
str.constructor === String;
결과 : true
var num = 123;
num.constructor === Number;
결과 : true
자바스크립트에서 오토박싱과정으로 인해 원시값이 프로퍼티나 메서드를 접근할때 임시 Wrapper 객체가 만들어지고 프로퍼티, 메서드 사용이 끝나면 임시 Wrapper 객체는 지워진다.
그리고 만들어진 Wrapper 객체는 변수에 할당된 원시값 타입별로 달라진다.
이상으로 혹시 내용에 문제가 있으면 언제든지 지적해주세요.
https://developer.mozilla.org/ko/docs/Glossary/Primitive
https://velog.io/@jakeseo_me/자바스크립트-개발자라면-알아야-할-33가지-개념-2-자바스크립트의-원시-타입Primitive-Type-번역