2022. 7. 15. 00:59ㆍWeb/JavaScript

11. 1 원시 값
11.1.1 변경 불가능한 값
원시 타입의 값, 즉 원시 값은 변경 불가능한 값이다. 읽기 전용
데이터의 신뢰성을 보장
// const 키워드를 사용해 선언한 변수는 재할당이 금지된다. 상수는 재할당이 금지된 변수일 뿐이다.
const o = {};
// const 키워드를 사용해 선언한 변수에 할당한 원시 값(상수)은 변경할 수 없다.
// 하지만 const 키워드를 사용해 선언한 변수에 할당한 객체는 변경할 수 있다.
o.a = 1;
console.log(o); // { a: 1 }
11.1.2 문자열과 불변성
원시 값을 저장하려면 먼저 확보해야 하는 메모리 공간의 크기를 결정해야 한다. 이를 위해 원시 타입별로 메모리 공간의 크기가 미리 정해져 있다.
* 단, ECMAScript 사양에 문자열 타입(2바이트)과 숫자 타입(8바이트) 이외의 원시타입은 크기가 브라우저 제조사의 구현에 따라 다를 수 있다.
var str = 'string';
// 문자열은 유사 배열이므로 배열과 유사하게 인덱스를 사용해 각 문자에 접근할 수 있다.
// 하지만 문자열은 원시 값이므로 변경할 수 없다. 이때 에러가 발생하지 않는다.
str[0] = 'S';
console.log(str); // string
11.1.3 값에 의한 전달
var score = 80;
// copy 변수에는 score 변수의 값과 80이 복사되어 할당된다.
var copy = score;
console.log(score, copy); // 80 80
console.log(score === copy); // true
score 변수와 copy 변수의 값 80은 다른 메모리 공간에 저장되니 별개의 값이다.
"값의 의한 전달"도 사실은 값을 전달하는 것이 아니라 메모리 주소를 전달한다.
단, 전달된 메모리 주소를 통해 메모리 공간에 접근하면 값을 참조할 수 있다.
11. 2 객체
객체는 프로퍼티의 개수가 정해져 있지 않고, 동적으로 추가 또는 삭제 할 수 있기때문에, 원시 값과 같이 확보해야 할 메모리 공간의 크기를 사전에 정해 둘 수 없다.
11.2.1 변경 가능한 값
객체(참조) 타입의 값, 즉 객체는 변경 가능한 값이다.
//할당이 이뤄지는 시점에서 객체 리터럴이 해석되고, 그 결과 객체가 생성
var person = {
name: 'Lee'
};
// person 변수에 저장되어 있는 참조 값으로 실제 객체에 접근한다.
console.log(person); // {name: "Lee"}

객체를 할당한 변수를 참조하면 메모리에 저장되어 있는 참조 값을 통해 실제 객체에 접근
11.2.2 참조에 의한 전달
var person = {
name: "Lee"
};
// 참조 값을 복수(얕은 복사)
var copy = person;

원본 peson과 사본 copy는 모두 동일한 객체를 가리킨다. 이것은 두 개의 식별자가 하나의 객체를 공유
"값의 의한 전달"과 "참조에 의한 전달"은 식별자가 기억하는 메모리 공간에 저장되어 있는 값을 복사해서 전달하는 면에서 동일하다. 다만 식별자가 기억하는 메모리 공간, 즉 변수에 저장되어 있는 값이 원시 값이냐 참조값이냐의 차이만 있을 뿐이다. 따라서 자바스크립트에는 "참조에 의한 전달"은 존재하지 않고 "값에 의한 전달만 존재한다고 말할 수 있다.
'Web > JavaScript' 카테고리의 다른 글
| [JavaScript] 모던 자바스크립트 Deep Dive 13장 - 스코프 (0) | 2022.07.20 |
|---|---|
| [JavaScript] 모던 자바스크립트 Deep Dive 12장 - 함수 (0) | 2022.07.18 |
| [JavaScript] 모던 자바스크립트 Deep Dive 10장 - 객체 리터럴 (0) | 2022.07.14 |
| [JavaScript] 모던 자바스크립트 Deep Dive 9장 - 타입변환과 단축 평가 (0) | 2022.07.13 |
| [JavaScript] 모던 자바스크립트 Deep Dive 8장 - 제어문 (0) | 2022.07.13 |