[JavsScrpt] 원시 타입 vs 객체 타입

Suvina·2024년 3월 30일

JavaScript

목록 보기
7/28
post-thumbnail

참고하면 좋은 [객체] 포스팅 (https://velog.io/@sooxpak/JavaScript-%EA%B0%9D%EC%B2%B4)

원시 타입

값 자체로써 변수에 저장되고 복사 된다
불변값이다 (메모리에 저장된 값 수정 x)

객체 타입

참조값을 통해 변수에 저장되고 복사된다
가변값이다(메모리에 저장된 값 수정 O)

객체 타입 주의사항

1) 의도치 않게 값이 수정될 수 있다.

얕은 복사

let o1 = { name : "김아무개" };
let o2 = o1;
o2.name = "홍길동";
=> o1의 값도 변경됨 (side effect가 발생한다고 말함)

깊은 복사

let o1 = {name : "김아무개" };
let o2 = {...o1};
o2.name = "홍길동";
=> 새로운 객체를 생성하여 사용하였기 때문에 o1의 값이 변경되지 않음
   스프레드 연산자를 사용했기 때문에 o1과 동일한 프로퍼티를 쉽게 가져올 수 있음

2) 객체간의 비교는 기본적으로 참조값을 기준으로 이루어진다.

let o1 = {name : "김아무개"};
let o2 = o1;
let o3 = {...o1};
console.log(o1 === o2); // true

console.log(o1 === o3); // false 
=> 프로퍼티는 동일하지만 참조값이 다르기 때문에 false 반환

참조값이 아닌 프로퍼티 기준으로 객체를 비교하고 싶다면, 내장함수인 JSON.stringify()를 사용하여 객체를 문자열로 변환하여 비교해야함

console.log(
    JSON.stringify(o1) === JSON.stringify(o3)
); //true

3) 배열과 함수도 사실 객체이다.

profile
개인공부

0개의 댓글