Primitive data type, Special data types and Non-Primitive data types
(new in ECMAScript 2015)
Primitive data types | number, string, boolean, null, undefined, symbol |
Special data types | undefined, null |
Non-Primitive data types | array, object, function, data, regex etc |
변수 = 담다 = Container
- 변수를 선언하면 computer's memory에 선언 변수 공간 생김(할당) -> Memory에 특정 양 bite 공간 확보
- 변수를 할당할 때 복사할 변수긔 값을 그대로 복사(Object의 경우 reference를 그대로 복사)
최소 단위 : primitive data types
최대 단위 : Non-primitive data types
Primitive data type
Primitive data type gets the fixed amount of memory at compile time. This technique is called as Static Memory Allocation. It is stored in STACK memory so it is fast and known as being immutable data types means we cannot change or increase its content after it is created.
프리미티브 데이터형은 컴파일 시 고정된 양의 메모리를 가져옵니다. 이 기술을 정적 메모리 할당이라고 합니다. 스택 메모리에 저장되므로 속도가 빠르며, 불변 데이터 유형으로 알려져 있어 생성된 후에는 내용을 변경하거나 늘릴 수 없습니다.
Non-Primitive data type
Non — primitive follows the technique of Dynamic Memory Allocation where memory allocation is not fixed and it depends on the content. It is stored in HEAP memory so it is slow compare to primitive datatype and known as being mutable data types means we can change or increase its content.
비 - 프리미티브는 메모리 할당이 고정되어 있지 않고 콘텐츠에 따라 달라지는 동적 메모리 할당 기술을 따릅니다. HEAP 메모리에 저장되므로 프리미티브 데이터 유형에 비해 속도가 느리고 변경 가능한 데이터 유형으로 알려져 있어 내용을 변경하거나 늘릴 수 있습니다.
Primitive data type, string
In the above example we can see that even though we have changed the name variable with ‘John’ still the previous one ‘Gourab’ is reflecting. It should print ‘John’.
Memory
메모리는 사실 블락(a block)으로 구성되어 있는데, 그곳에는 특별한 주소가 없다. 위 예제를 따라서 Name은 데이터 타입에 따라서 블락을 구성한다.
Variable name : 'Gourab'
Memory address : 2500
var firstName = name;
여기서 firstName은 위의 이미지의 name에 할당된 Gourab이라는 value를 복사한다.
name = 'John';
name에 John을 넣어도 firstName이 복사한 value는 현재 Memory에서 Gourab이기 때문에 마지막 console.log(firstName);를 실행해도 결과론 Gourab이 출력된다.
Where is going on name = 'John'; ?
위에서 할당한 name = 'John';은 그러면 어디로 갔을까? 개발자가 명령을 했는데 반영이 안된 것일까?
아니다.
그건 Original name에 할당되어 변경되었다.
Non-Primitive data type, Object
Object는 reference라는 영역을 활용한다. 그렇기때문에 value는 Mutable이다. 마지막에 person.name = 'John'; 을 명령했을때, 오른쪽 결과값에서 'John'이 출력된다.
결국 많은 자료와 영상에서 말하는 reference는 Memory address를 의미한다. 위의 이미지에서는 2000가 reference가 된다.
보다 자세한 내용은 아래 사이트를 통해 확인
https://medium.com/@gourabb68/primitive-vs-non-primitive-data-type-in-javascript-6419aaecd96c
'나의 FE피봇이야기 > Javascript' 카테고리의 다른 글
[JS]선언과 함수의 이해 (0) | 2023.09.13 |
---|---|
[JS]function 안 this의 History? (0) | 2023.09.12 |
[JS]데이터 타입 (0) | 2023.09.10 |
[JS] function 과 'window'의 개념 이해 (0) | 2023.09.09 |
[JS] JavaScript Way 객체지향 (0) | 2023.09.07 |