1.1.2 값을 저장하는 방식의 차이
원시 타입과 객체 타입의 가장 큰 차이점
원시 타입
- 불변 형태의 값으로 저장됨
- 변수 할당 시점에 메모리 영역 차지하고 저장됨
- 복사할 때 값을 전달함
-
let hello = 'hello world' let hi = hello console.log(hello === hi) // true
- 값을 비교하기 때문에, 각각 선언하는 방식으로도 동일한 결과 볼 수 있음
-
let hello = 'hello world' let hi = 'hello world' console.log(hello === hi) // true
객체 타입
- 프로퍼티를 삭제, 추가, 수정할 수 있으므로 변경 가능한 형태로 저장됨
- 값이 아닌 참조를 저장함
- 값을 복사할 때도 값이 아닌 참조를 전달함
-
var hello = { greet: 'hello, world', } var hi = { greet: 'hello, world', } console.log(hello === hi) // false // 원시값인 내부 속성값을 비교하면 동일함 console.log(hello.greet === hi.greet) // true
- 값을 저장하는 게 아니라 참조를 저장하기 때문에 앞서 동일하게 선언했던 객체라 하더라도 저장하는 순간 다른 참조를 바라보기 때문에 false 반환
- 반면, 참조를 전달하는 경우 즉, value가 가리키는 주소가 동일하면 true 반환
-
var hello = { greet: 'hello, world', } var hi = hello // hello와 hi 변수는 변수명 및 각 변수명의 주소가 서로 다르지만 value가 가리키는 주소가 동일함 // 즉, value 값이 hello.greet = "something"과 같이 변경된다 하더라도 hi와 hello 비교는 언제나 true 반환 console.log(hello === hi) // true
- 결론: 항상 객체 간에 비교가 발생하면, 이 객체 간의 비교는 우리가 이해하는 내부의 값이 같다 하더라도 결과는 대부분 true가 아닐 수 있다는 것 인지하기
'Modern React Deep Dive > 01장 리액트 개발을 위해 꼭 알아야 할 자바스크립트' 카테고리의 다른 글
1.2.2 함수를 정의하는 4가지 방법 (0) | 2024.04.02 |
---|---|
1.2.1 함수란 무엇인가? (0) | 2024.04.02 |
1.1.4 리액트에서의 동등 비교 (0) | 2024.03.29 |
1.1.3 자바스크립트의 또 다른 비교 공식, Object.is (0) | 2024.03.29 |
1.1.1 자바스크립트의 데이터 타입 (0) | 2024.03.29 |