1️⃣
원시 타입의 값 === 원시 값
은변경 불가능한 값(immutable value)
이다.객체 타입의 값 === 객체
는변경 가능한 값(mutable value)
이다.
2️⃣
원시 값을 변수에 할당하면
변수에는 실제 값이 저장
된다. 객체를 변수에 할당하면변수에는 참조 값이 저장
돤다.
3️⃣
원시 값을 갖는 변수를 다른 변수에 할당하면 원시 값이 복사되어 전달 →
값에 의한 전달(pass by value)
객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달 →참조에 의한 전달(pass by reference)
원시 값은
변경 불가능한 값(immutable value)
==읽기 전용(read only) 값
변경 불가능하다.
변수
는 하나의 값을 저장하기 위해 확보한 메모리 공간 or 메모리 공간을 식별하기 위해 붙인 이름값
은 변수에 저장된 데이터값에 대한 진술
이다.원시 값 자체를 변경할 수 없다. → O
변수 값을 변경할 수 없다. → X
// 💡 변수 vs 상수
변수(variable)
+ 변수는 언제든지 "재할당"을 통해 변수 값을 변경(= 정확히는 "교체")할 수 있다. 그래서 "변수"다.
상수(constant)
+ 상수도 값을 저장하기 위한 메모리 공간이 필요하므로 "변수"라고 할 수 있다.
+ 하지만, 상수는 단 한 번만 할당이 허용하므로 변수 값을 변경(= 정확히는 "교체")할 수 없다.
불변성(immutability)
= 변수 값을 변경하기 위해 원시 값을 재할당하면 새로운 메모리 공간을 확보하고 재할당한 값을 저장한 후, 변수가 참조하던 메모리 공간의 주소를 변경하는 것
재할당
// 'string' 에서 첫 번째 's' 를 'S' 로 변경하려 하지만 str 변수는 "문자열, 즉 원시 값"
// 원시 값은 변경 불가능한 값(immutable value) -> 값이 업데이트 되지 않는다.
var str = "string";
str[0] = "S";
console.log(str); // "string"
// 재할당으로 값을 변경하는 것은 가능
var str = 'Hello';
str = 'World';
console.log(str); // "World"
💡 유사 배열 객체
+ 배열처럼 인덱스로 프로퍼티 값에 접근할 수 있으며, length 프로퍼티를 갖는 객체
+ length 프로퍼티를 갖기 때문에 "유사 배열 개체" 이며, for 문으로 순회도 가능