[javascript] 데이터 타입

mook9288·2021년 1월 5일
0

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개의 댓글