
자바스크립트의 자료형은 크게 2가지로 분류한다. Primitive / Reference
변수와 값이 그대로 저장된다.
Primitive data type을 가진 자료형
변수에 reference가 저장된다.
Reference가 저장된다는 말은 이 데이터가 어느쪽에 있다는 주소가 저장된다는 말이다.
Reference data type을 가진 자료형
var a = "Kim";
var b = a;
console.log(a); // Kim
console.log(b); // Kim
a = "Park";
console.log(a); // Park
console.log(b); // Kim
결과

변수 a에 Kim을 넣고 b에 복사했을 때 a와 b모두 Kim이 들어갔다.
변수 a만 Park으로 바꿨을 때 a만 바뀌고 b는 그대로인것을 확인할 수 있다.
var a = { name: "Kim" };
var b = a;
console.log(a); // Kim
console.log(b); // Kim
a.name = "Park";
console.log(a); // Park
console.log(b); // Park
결과

변수 a에 오브젝트 {name: "Kim"}을 넣고 b에 복사했을 때 a와 b모두 {name: "Kim"}이 들어갔다.
변수 a.name만 Park으로 바꿨지만 a와 b 모두 바뀐 것을 확인할 수 있다.
a에는 {name: "Kim"}가 어디에 있다는 주소가 저장되어 있기 때문에 b로 복사할 때 동일한 주소가 복사된 것이다. 두 변수는 같은 주소를 공유하기 때문에 그 주소가 가리키고 있는 값이 변경되면 주소를 공유하고 있던 다른 변수에서도 값이 변경된다.
var name1 = "Kim";
var name2 = "Kim";
console.log(name1 == name2); // true
Primitive data type은 같은 문자열 Kim을 ==로 비교하면 true가 나온다.
var name3 = { name: "Park" };
var name4 = { name: "Park" };
console.log(name3 == name4); // false
console.log(name3.name == name4.name); //true
Reference data type은 같아 보이는 오브젝트 { name: "Park" }을 ==로 비교하면 false가 나온다. 보기엔 똑같이 생겼지만 각각 다른 레퍼런스를 저장하고 있기 때문에 false가 나오는 것이다.
name3.name == name4.name 처럼 오브젝트의 키 값에 접근하여 비교하자.