JavaScript의 data type에는 Primitive(기본형)와 Reference(참조형)이 있다.
데이터는 성질에 따라 변수 영역(=v)과 데이터 영역(=1)으로 구분되어 저장된다.
var v = 1; // 변수 v에 1을 할당`
위의 코드는 사실
var v; // 변수 v선언
v = 1; // 데이터 1 할당
이 두 줄의 코드를 합쳐 놓은 것이다.
즉, 변수 v를 선언하고, v의 값에 1이라는 데이터를 할당한 것.
이 코드를 실행하면,
바로
let a = 5
let b = a
console.log(a) // => 5
console.log(b) // => 5
a = 1
console.log(a) // => 1
console.log(b) // => 5
Null 타입은 딱 한 가지 값, null 을 가질 수 있다.
값을 할당하지 않은 변수는 undefined 값을 가진다.
텍스트 데이터를 나타내는데 사용한다.
immutable(한 번 문자열이 생성되면, 그 문자열을 수정할 수 없다)
하지만, 원래 문자열에서 일부가 수정된 다른 문자열을 만드는건 가능하다.
ex)
var v1; // undefinded
var v2 = null; // object
var v3 = 123; // number
var v4 = 1.23; // number
var v5 = true; // boolean
var v6 = false; // boolean
var v7 = "hello"; // string
var v8 = "A"; // string
console.log(typeof v1); // undefined
console.log(typeof v2); // object
console.log(typeof v3); // number
console.log(typeof v4); // number
console.log(typeof v5); // boolean
console.log(typeof v6); // boolean
console.log(typeof v7); // string
console.log(typeof v8); // string
var v = 1;
v = v + 1; // v = v + 2;`
var v = 1; 에서 기본형 데이터인 1이 불변 값이라는 뜻이다.
v가 불변성을 가지는 것이 아니다.
v = v + 1, v = v +2 를 보면 1이 2로 변하고 1이 3으로 변한 것처럼 이해할 수 있지만, 식별자 v 가 다른 값을 참조하는 거지 1은 변한 것이 아니다.
즉, 1 은 2 또는 3 처럼 다른 값으로 변경할 수 없다는 것을 불변성이라고 한다.
데이터 1을 가지고 있는 주솟값을 다른 주솟값으로만 변경한 것일 뿐 1은 변하지 않고 그대로 존재한다.
식별자 v 의 값은 변경되었지만 데이터 1은 변하지 않았다는 것.. 모든 기본형에서 마찬가지다.
사용하지 않는 데이터는 가비지 컬렉터에 의해 메모리에서 제거된다.
let a = {name: "해리포터"}
let b = a
console.log(a) // => {name: "해리포터"}
console.log(b) => {name: "해리포터"}
a.name = "론위즐리"
console.log(a) // => {name: "론위즐리"}
console.log(b) // => {name: "론위즐리"}
var v1 = function() {};
var v2 = new Array();
var v3 = new Date();
var v4 = new Map();
var v5 = new Set();
var v6 = {};
console.log(v1); // [Function]
console.log(v2); // []
console.log(v3); // Sun Jul 12 2020 07:54:46 GMT+0900 (대한민국 표준시)
console.log(v4); // Map {}
console.log(v5); // Set {}
console.log(v6); // {}
console.log(typeof v1); // function
console.log(typeof v2); // object
console.log(typeof v3); // object
console.log(typeof v4); // object
console.log(typeof v5); // object
console.log(typeof v6); // object
var obj = {
prop1: "hello",
prop2: "world"
};
위 코드 실행 시 메모리에서의 변화
obj.prop1 = "안녕";
obj.prop2 = "하세요";
var obj = { prop1: "hello", prop2: "world" };
obj.prop1 = "안녕";
obj.prop2 = "하세요";
작성한 코드의 실행과정을 확인할 수 있는 유용한 사이트
참고 자료
Javascript Passing by Value vs. Reference Explained in Plain English
[Javascript] 데이터 타입과 할당 (typeof, var, memory, 기본형, 참조형, 불변성, 가변성)
코어 자바스크립트 - 1장. 데이터 타입