- 원시 값
- 변경 불가능한 값 → 불변성의 특징을 가짐
- 변수에 할당하면 변수(확보된 메모리 공간)에는 실제 값이 저장됨
- 원시 값 변수를 다른 변수에 할당하면 원시 값이 복사되어 전달
- 객체
- 변경 가능한 값
- 변수에 할당하면 변수(확보된 메모리 공간)에는 참조 값이 저장됨
- 객체 변수를 다른 변수에 할당하면 참조 값이 복사되어 전달
불변성이란?
- 불변성이란 메모리에 할당된 값은 변하지 않는다는 것을 말한다.
- 따라서 변수의 값을 변경하기 위해 원시 값을 재할당하면 새로운 메모리 공간을 확보하고 재할당한 값을 저장한 후, 변수가 참조하던 메모리 공간의 주소를 변경한다.
- 원시 값의 불변성 특징 때문에 상태 변경을 추적할 수 있다.
문자열과 불변성
- 문자열의 특징
- 원시 값
- 변경 불가능
- 일부 문자를 다른 값으로 변경해도 반영되지 않음
- 유사 배열 객체
- 인덱스로 접근 가능
- length 프로퍼티 가짐
- 이터러블
- 예시
var str = 'string';
// 인덱스로 접근
console.log(str[0]); // s
// 객체처럼 동작
console.log(str.length); // 6
console.log(str.toUpperCase()); // STRING
// 그러나 값은 변경할 수 없다. (에러는 발생하지 않음)
str[1] = 'p';
console.log(str); // string
// 재할당은 가능하다.
str = 'spring';
console.log(str); // spring
값에 의한 전달 vs 참조에 의한 전달
값에 의한 전달 (원시 값)
var score = 80;
var copy = score;
score = 100;
console.log(score); // 100
console.log(copy); // 80
var score = 90;
var copy = score;
console.log(score === copy); // true
score = 100;
console.log(score === copy); // false
- 원시 값은 해당 변수에 할당된 값 자체를 비교한다.
참조에 의한 전달 (객체)
var person = {
name: 'leeeunji'
};
var copy = person;
copy.name = 'eunjios';
person.country = 'korea';
console.log(person); // {name: 'eunjios', country: 'korea'}
console.log(copy); // {name: 'eunjios', country: 'korea'}
var person = {
name: 'leeeunji'
};
var copy = person;
console.log(person === copy); // true
var newPerson = {
name: 'leeeunji'
};
console.log(person === newPerson); // false