[javascript] 데이터 타입

mook9288·2021년 1월 5일

Data Type

자바스크립트 데이터 타입에는 크게 2가지 타입이 있다. 기본형(원시형, Primitive Type)과 참조형(Reference Type) 이다.

Primitive Type

숫자(Number), 문자열(String), 불리언(Boolean), null, undefined, symbol

값을 그대로 할당한다.

symbol 은 ES6에서 추가되었다.

var a = 'mook';
a = false;

var b = a;
b = 30;

console.log(a === b); // false

ab는 같지 않다. ba의 값을 할당했을 때는 서로 같지만, b20으로 재할당하면서 데이터의 값이 변했기 때문이다.

Reference Type

Object(하위 부류 Array, Function, RegExp 등)

값이 저장된 주소값을 할당한다.(참조)

var obj1 = {
  a: 1,
  b: 'mook'
}
var obj2 = obj1;

obj2.a = 3;

console.log(obj2.a === obj1.a); //true

obj1obj2의 데이터 형은 참조형이기 때문에 값이 저장된 주소값을 할당한다.
obj2obj1의 주소를 할당하는데, obj2는 새로운 객체를 만든 것이 아니라 원래 obj1에 할당된 객체를 함께 바라보고 있는 것이다. 즉, 두 변수는 완전히 동일한 객체를 참조하고 있다.
obj2.a = 3obj2.a의 참조된 주소의 데이터 값이 변경된 것이다. 따라서 obj2.aobj1.a는 같은 주소를 바라보고 있기 때문에 obj2.a가 변경되면 obj1.a도 동일하게 변경되어 두 데이터의 값은 같게 된다.

데이터 공간에 기본형 데이터가 담길때까지 반복하는데 기본형 데이터의 집합이라고 볼 수 있다.

typeof(null) === "object" ?

null은 Primitive Type이지만 typeof로 확인해보면 object로 출력된다.

자바스크립트 설계 당시부터 있었던 버그라고 한다.
이 버그를 고치기엔 너무 많이 퍼져있어서 그냥 놔두고 있다고 한다.

immutable value vs. mutable value

변수의 데이터타입이 Primitive(기본형)면 불변성, Reference(참조형)면 가변성이다.

Primitive Type 변수를 재할당 하면 데이터 자체가 바뀌는 게 아니고, 메모리 상에서 참조가 바뀌게 된다. 메모리 영역에서의 변경이 불가능하고 재할당은 가능하다

Reference Type 변수는 새로운 객체가 만들어지는게 아니라, 메모리 상에서 참조값만 바뀌게 되는 것입니다.

0개의 댓글