있는 그대로 저장되는 데이터를 표현합니다.
const value = 100;
console.log(value);
원시값을 변수에 할당하면 값이 복사되어 들어갑니다. 즉, 원시값이 하당된 변수들을 모두 자기 자신만의 고유한 값을 가지게 됩니다.
let one = 1;
let two = 2;
one = two; // 2
one = 3; // 3
console.log(two) // 2
console.log(one) // 3
원시값의 종류를 알 수 있게 해주는 매서드입니다.
null의 타입에 주의필요!
console.log(typeof 1) // "number"
console.log(typeof "hello") // "string"
console.log(typeof true) // "boolean"
console.log(typeof null) // "object" -> value === null
console.log(typeof undefined) // "undefined"
참조 타입은 변수에 값을 직접 저장하지 않습니다.
변수에 저장되는 것은 메모리 안에서 객체의 위치를 가리키는 "포인터"입니다.
무엇이 저장되느냐, 이것이 원시 타입과 참조 타입의 가장 큰 차이입니다.
let objOne = {one:1}
let objTwo = {two:2}
objTwo = objOne // 메모리의 같은 주소를 바라보게 되었다. 값이 변경되면 메모리가 바라보고 있는 객체가 변경된 것이기 때문에 값이 같이 변경되는 것이다.
objTwo.one = 100;
console.log(objOne) // {one:100}
console.log(objTwo) // {one:100}
왜일 까요?
let str = "hello world";
console.log(str.length) // 11 문자열의 갯 수 -> 원래 래퍼 타입 메소드 ex) .length
원시 타입을 객체처럼 편리하게 사용하도록 도와줍니다.
원시 타입을 객체처럼 사용하는 순간, 자바스크립트 내부에서 사용하는 데이터의 인스턴스를 만들게 됩니다. 이렇게 만들어진 객체는 코드를 실행 후 바로 다음 줄에서 파괴됩니다.
이러한 과정을 오토박싱(autoboxing) 이라고 합니다.
//ex1
let name = "bit"
console.log(name.concat(" coin")); // "bit coin"
let name = "bit";
let temp = new String(name); // 임시변수의 메서드를 만들어준다
console.log(temp.concat("coin")); // 실행 후!
temp = null // 메모리 해제
//ex2
let name = "bit";
name.coin = "coin";
console.log(name.coin); // undefined
let name = "bit";
let temp = new String(name);
temp.coin = "coin";
temp = null; // 파괴되었어다.
let temp = new String(name); // 다시 생성
console.log(temp.coin); // undefined