1. 데이터 타입 (Data type)의 종류
// 1. 데이터 타입(Data type)
// (1) 기본형 (Primitive type)
// a. Number
// b. String
// c. Boolean
// d. null
// e. undefined
// f. Symbol
// (2) 참조형 (Reference type)
// A. 객체 (Object)
// a. Array
// b. Function
// c. Date
// d. RegExp
// e. Map, WeakMap
// f. Set, WeakSet
기본형과 참조형을 나누는 기준?
1. 값의 저장방식
기본형 : 주소값을 복제
참조형 : 주소값 묶음의 주소값을 복제
2. 불변성 여부
기본형 : 불변성을 띔
참조형 : 불변성을 띄지 않음
변수 = 데이터
식별자 = 변수명
2. 데이터 영역
변수 영역 | 주소 | 1001 | 1002 | 1003 |
데이터 | 이름 : str 데이터 : 5001 |
obj1 / 7101~7102 |
변수 : 변수 영역 메모리를 변경할 수 있음
상수 : 변수 영역 메모리를 변경할 수 없음
데이터 영역 | 주소 | 5001 | 5002 | 5003 |
데이터 | 'test' | 1 | 2 |
참조형 데이터 영역 | 주소 | 7101 | 7102 | 7103 |
데이터 | a / 5002 | b / 5003 |
* 참조형 데이터는 별도 저장공간(obj1을 위한)이 필요하다.
* 참조형 데이터 영역은 데이터 영역 주소값을 변경할 수 있기에 가변하다.
불변하다 : 데이터 영역 메모리를 변경할 수 없음
불변하지 않다 : 데이터 영역 메모리를 변경할 수 있다.
데이터에 데이터 값을 바로 넣지 않고 주소값을 넣는 이유?
(1) 자유로운 데이터 변환
숫자는 8byte로 고정이지만 문자는 고정이 아니다 (영문 1byte, 한글 2byte)
따라서, 1001 주소에 할당된 데이터를 변경하려고 할 때 보다 큰 데이터를 저장하려면
1004 이후부터 저장된 데이터를 다 미뤄야한다.
이걸 방지하기 위해 주소값을 넣는 것.
(2) 메모리의 효율적인 관리
같은 데이터의 변수들이 있을 때 데이터 저장 공간의 여유를 위해서
3. 객체의 복사
1. 얕은 복사
copyObject
2. 깊은 복사
재귀적 수행 (함수나 알고리즘이 자기 자신을 호출하여 반복적으로 실행하는 것)
var copyObjectDeep = function(target) {
var result = {};
if (typeof target === 'object' && target !== null) {
for (var prop in target) {
result[prop] = copyObjectDeep(target[prop]);
}
} else {
result = target;
}
return result;
}
4. undefined, null
'없다'를 명시적으로 표현할 때는 undefined가 아닌 null을 사용해야 한다.
var n = null;
// 동등연산자
n == undefined // true
n == null //true
// 일치연산자
n === undefined // false
n === null // true
동등연산자를 사용하면 null과 undefined는 true로 나오지만
일치연산자를 사용하면 타입까지 맞아야 하기 때문에 false로 반환된다.
'개발일지' 카테고리의 다른 글
Reduce, map() 을 이용해 코딩테스트 풀기 (0) | 2023.10.24 |
---|---|
2023.10.23. TIL JavaScript 3주차 (2) (1) | 2023.10.23 |
CSS 그리드(grid) 양쪽 여백 남기고 중앙정렬하는 법 (1) | 2023.10.19 |
JavaScript 화면 단위 스크롤 1편 (1) | 2023.10.17 |
2023.10.13. TIL JavaScript 2주차 (0) | 2023.10.13 |