자바스크립트의 데이터 타입은 크게 두가지로 분류된다.
원시 타입과 참조 타입
Number, String, Boolean, null, undefined, Symbol(ES6에서 추가됨)
let a = 'abc';
a = a + 'def'; // 기존의 'abc가 'abcdef'로 바뀌는게 아니다.
// 새로운 문자열 'abcedf'를 만들어 그 주소를 변수 a에 저장하는것
console.log(a); // 'abcdef'
let b = 5;
let c = 7;
b = 7; // 기존에 저장했던 7을 찾아서 있으면 재활용하고, 없으면 새로 만들어 b에 저장.
// 즉, 기존에 저장된 5 자체를 7로 바꾸는게 아니다.
console.log(b); // 7
console.log(c); // 7
Object, Array, Function, Date, RegExp, Map, WeakMap, Set, WeakSet(ES6에서 추가됨)
let a = [1,2,3,4,5];
let b = a; // 변수 a와 b는 같은 메모리 주소를 참조한다.
b[4] = 6; // b의 4번째 인덱스 값은 6이라고 재할당
// 배열의 값이 변경되면 b를 수정하면 a가 참조하는 값의 내용도 변경된다.
console.log(b); // [ 1, 2, 3, 4, 6 ]
console.log(a); // [ 1, 2, 3, 4, 6 ]