JavaScirpt 공부 정리
<모던 자바스크립트 Deep Dive>의 목차를 따릅니다. 책을 발제하는 것을 기본 골조로 하고, 개인이 공부한 내용을 추가합니다.
Primitive type | Object type | |
---|---|---|
value | immutable | mutable |
원시값/객체를 변수에 할당하면 변수(확보된 메모리 공간)에는___이 저장된다. | 실제 값 | 참조 값 |
🐸 복습
- 변수: 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 상징적인 이름
- 값: 변수에 저장된 데이터로서 표현식이 평가되어 생성된 결과
- 값을 재할당하면, 이전의 원시 값을 변경하는 것이 아니라, 새로운 메모리 공간을 확보하여 재할당한 원시값을 저장한다.
var str = 'hello';
str[0] = 'H';
consoloe.log(str); // hello
var score = 80;
var copy = score;
console.log(score, copy); // 80 80
console.log(score === copy); // true
score = 100;
console.log(score, copy); // 100 80
console.log(score === copy); // false
변수 copy를 위한 새로운 메모리 공간이 만들어지고 거기에 80이라는 값이 할당되었다.
이와 별개로, 상징적 이름의 변수 score이 가리키던 80이 들어있는 메모리 공간이 있었는데, 재할당되면서 이 상징적 이름의 변수 score가 100이 들어있는 메모리 공간을 가리키게 되었다.
결국은 두 변수의 원시 값은 서로 다른 메모리 공간에 저장된 별개의 값이 되어, 어느 한쪽에서 재할당을 통해 값을 변경하더라도 서로 간섭할 수 없다.
var person1 = {
name: 'Lee'
};
var person2 = {
name: 'Lee'
};
console.log(person1 === person2);
// false: 내용은 같지만 다른 메모리에 저장된 별개의 객체
console.log(person1.name === person2.name);
// 프로퍼티 값을 참조하는 person1.name은 값으로 평가될 수 있는 표현식이다. 두 표현식 모두 원시 값 'Lee'로 평가된다.