원시 자료형(primitive data type) : 고정된 저장 공간을 차지하는 데이터
let a = 1;
let b = a;
b = 2;
a; //1
참조 자료형(reference data type) : 대량의 데이터를 다루기 적합
let e = [10,20]let f = e;
f[0] = 50;
e;//[50,20]
원시 자료형의 변수에는 하나의 데이터만 담긴다.
let word = "hello world!"
word = "hello dyract!"
// word라는 변수에 >>재할당<<을 하여 변수에 담긴 내용을 변경할 수 있음
const num1 = 123;
num1 = 123456789; // 에러 발생
// const 키워드로 선언하면 재할당은 불가
참조 자료형은 데이터가 위치한 곳(메모리상 주소)를 가리키는 주소가 변수에 저장된다.
데이터 보관함은 동적(dynamic)으로 변하며, heap이라고 부른다.
대량의 데이터를 관리하는 경우에는 고정된 데이터 공간을 사용하는 것이 비효율적이기 때문.
console.log('dyract' === 'dyract'); //true
console.log(3.14 === 3.14); //true
console.log([1,2,3] === [1,2,3]); //false, 주소값이 같은지를 확인하기 때문
console.log({ foo: 'bar' } === { foo: 'bar' }) //false, 주소값이 같은지를 확인하기 때문
let score = 80;
function doStuff(value) {
value = 90;
}
doStuff(score)
함수 doStuff에 score의 값을 인자로 전달하여 실행하면 매개변수 value에 score의 값 80이 전달되고, vaule에 90이 할당된다. 다만 score의 값 80은 주소값이 아닌 값 자체를 복사해서 전달하기 때문에 함수에서 어떤 일이 발생하건 관계없이 score는 초기에 할당된 값 80이 그대로 유지된다.
let player = { score: 3 };
function doStuff(obj) {
obj.score = 2;
}
doStuff(player); //play.score : 2
함수가 실행되면 매개변수 obj에 변수 player의 값이 할당되며, 이것은 { score : 3 }의 주소값이다. obj.score에 2를 할당하면 obj와 plauyer은 같은 주소값을 가지고 있기 때문에 player.score도 2가 된다.