기초
자바스크립트에는 6가지 원시 데이터 타입이 있다.
원시 데이터 타입이란 자바스크립트에서 객체가 아닌 것을 말하면 값 그대로 저장된 것을 말한다.
- Booleans : true or false
- null
- undefined
- number
- string
- symbol
6가지 원시 타입에 ECMAScript 표준은 Object를 정의했다. Object는 키-값 저장소이다.
const object = {
key: "value"
}
즉, 원시 타입( Primitive Type )이 아닌 것은 Object이다. 여기에는 함수와 배열도 포함이다.
// Primitive Types
true instanseof Object; // false => boolean
numm instanseof Object; // false => null
undefined instanseof Object; // false => undefined
0 instanseof Object; // false => number
'string' instanseof Object; // false => string
// Non Primitive Types
const func = function () {};
func instanseof Object; // true => function
원시 타입
원시 타입은 변수에 할당될 때, 메모리의 고정 크기로 원시 값을 저장하고 해당 저장된 값을 변수가 가리키는 형태이다.
그리고 재할당 시 기존 값을 변경시키는 것처럼 보일지 몰라도 새로운 메모리에 재할당한 값이 저장되고
변수가 가리키는 메모리가 달라지는 불변성을 가지고 있다.
let a = 100;
a = 50;
a라는 변수에 100이란 값을 할당하고 2번째 라인에 50으로 재할당해준 예시이다.
첫 라인이 실행되면 메모리에 Number 타입의 100이 생성되고 a는 메모리에 생성된 100의 주소를 가리킨다.
그 후, 두 번째 라인이 실행되면 100이란 값이 50으로 수정되는 것이 아닌 새로운 Number 타입의 50이 생성되고
a가 가리키던 메모리를 바꾸는 것이다.
반면에 Object는 참조 타입으로 데이터 자체는 별도의 메모리 공간 ( Heap )에 저장되며, 변수에 할당 시
데이터에 대한 주소 ( Heap 메모리의 주소 값 )가 저장되기 때문에 자바스크립트 엔진은 변수가 가지고 있는
메모리 주소를 이용해서 변수의 값에 접근한다.
함수
함수는 특별한 프로퍼티를 가진 새로운 형태의 객체이다.
const func = function (props) {};
func.name; // "func"
func.length; // 1
일반적인 객체와 같이 함수에 새로운 프로퍼티를 추가하는 것도 가능하다.
func.age = 11;
func.age; // 11;
'JavaScript' 카테고리의 다른 글
[JavaScript] ==과 === 차이 (1) | 2022.06.20 |
---|---|
[JavaScript] 암묵적 타입 변환 (1) | 2022.06.19 |
[JavaScript] Destructuring 문법 (0) | 2022.06.13 |
[JavaScript] ... 문법 (2) | 2022.06.11 |
[JavaScript] 콜스택 (1) | 2022.06.04 |