Javascript
Javascript 타입 (원시타입, 참조타입, 원시래퍼타입)
superchae
2023. 2. 7. 23:05
원시타입
원시 타입은 있는 그대로 저장되는 데이터를 표현한다.
종류: 불리언, 숫자, 문자열, null, undefined
typeof를 통해 원시값의 타입을 알 수 있다. 주의할 점으로 null 일 경우 object로 표시된다. (object는 참조타입인데, 이것은 js재단에서 실수라고 인정했다.)
var str = "abc";
console.log(typeof str); // string
var tmp = null
console.log(typeof tmp); // object (주의!)
참조타입
참조 타입은 변수에 값을 직접 저장하지 않고 변수에 저장되는 것은 메모리 안에서 객체의 위치를 가리키는 포인터이다.
무엇이 저장되느냐가 원시타입과 참조타입의 큰 차이점이다.
종류: 객체 {}, 배열 [], 함수 function, Date, 정규표현식 RegExp (원시 타입빼고 전부 참조 타입으로 봐도 좋음)
var objOne = {one : 1};
var objTwo = {two : 2};
objTwo = objOne;
objTwo.one = 3;
console.log(objOne); // 3
원시 래퍼 타입
원시 래퍼 타입은 원시 타입을 객체처럼 편리하게 사용하도록 도와준다.
종류: String, Number, Boolean
원시 타입을 객체(참조타입)처럼 사용하는 순간, 자바스크립트 내부에서 사용하는 데이터의 인스턴스를 만든다. 이렇게 만들어진 객체는 코드를 실행 후 바로 다음 줄에서 파괴된다. 이러한 과정을 오토박싱 (autoboxing) 이라고 한다.
var str = "hello world";
console.log(str.length);
위 코드에서 str은 원시타입이다. str.length는 어떻게 사용되는 것일까?
예시 1.
var name = "bit"
console.log(name.concat("coin"); // "bitcoin"
autoboxing
var name = "bit"
var temp = new String(name);
console.log(temp.concat("coin");
temp = null;
실제 JS에서는 임시 변수를 만들어서 원시 타입을 객체처럼 사용할 수 있도록 한다.
예시 2.
var name = "bit";
name.coin = "coin";
console.log(name.coin); // undefined
autoboxing
var name = "bit";
var temp = new String(name);
temp.coin = "coin";
temp = null;
var temp = new String(name);
console.log(temp.coin);
temp = null;