원시 타입과 객체(참조) 타입의 차이
1. 원시 값은 변경 불가능한 값 <-> 객체는 변경 가능한 값
2. 원시 값을 변수에 할당하면 변수(확보된 메모리 공간)에는 실제 값이 저장됨
<-> 객체를 변수에 할당하면 변수(확보된 메모리 공간)에는 참조 값이 저장
3. 원시 값을 갖는 변수를 다른 변수에 할당 => 원본의 원시 값이 복사되어 전달(값에 의한 전달, pass by value)
<-> 객체를 가리키는 변수를 다른 변수에 할당 => 원본의 참조 값이 복사되어
전달(참조에 의한 전달, pass by referene)
변수
: 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 / 그 메모리 공간을 식별하기 위해 붙
인 이름
값
: 변수에 저장된 데이터로 표현식이 평가되어 생성된 결과
=> 변경 불가능하다 = 변수가 아니라 값에 대한 진술
-> 원시 값 자체를 변경할 수 없다는 것, 변수 값을 변경할 수 없다는 아님(변수는 재할당으로 변수 값 교체 가능)
상수
: 재할당이 금지된 변수 (const, 하지만 const로 선언한 변수에 할당한 객체는 변경 가능)
const o = {}; // 원시 값은 변경 불가능
o.a = 1; // const로 선언한 변수에 할당한 객체는 변경 가능
console.log(o); // {a: ij
변수에 값 재할당 -> 원시 값 변경 불가능이므로 교체됨(메모리 공간의 주소 바뀜) => 불변성
문자열
: 0개 이상의 문자로 이뤄진 집합, 1개의 문자는 2바이트의 메모리 공간에 저장됨, 유사 배열 객체
=> 자바스크립트는 개발자의 편의를 위해 원시 타입인 문자열 타입을 제공함
문자열의 한 문자를 변경하거나 일부 문자를 변경해도 반영되지 않음 -> 에러 발생 없이 무시함
유사 배열 객체: 배열처럼 인덱스로 프로퍼티 값에 접근할 수 있고, length 프로퍼티를 갖는 객체, for 문으로 순회 가능
var str = 'string' ; console.log(str[0}); // s
값에 의한 전달
: 변수에 원시 값을 갖는 변수를 할당 -> 할당받는 변수에는 할당되는 변수의 원시 값 이 복사되어 전달됨, 둘의 값은 같지만 다른 메모리 공간에 저장된 별개의 값임
-> 할당되는 변수의 값을 변경해도 할당하는 변수는 안 바뀜
var score = 80;
var copy = score;
console.log(score, copy); // 80 80
console.1.og(score === copy); // true