개발/JavaScript

[JavaScript] 코어 자바스크립트 - 1. 데이터 타입

알파카털파카 2023. 2. 18. 06:22

1. 자바스크립트의 타입은 어떤 것이 있을까요?

기본형(Primitive Type), 참조형(Reference Type)

 

2. 기본형과 참조형에는 어떤 타입이 있을까요?

기본형(Primitive Type) : string, number, boolean, undefined, null, symbol

참조형(Reference Type) : Object - Array, Function, Date, RegExp, Map/WeakMap, Set/WeakSet

 

3. 참조형이라고 부르는 이유는 뭘까요?

데이터 영역에 데이터의 주솟값을 연결하는 방식으로 데이터를 저장하기 때문

참조형은 내부 프로퍼티 값을 변경하면 연결된 데이터 영역이 바뀌게 될 뿐, 참조형 자체의 데이터가 변하는 것이 아님

 

4. 기본형과 참조형을 구분한 이유는 무엇일까요?

기본형은 데이터가 담긴 주솟값을 바로 복제

참조형은 데이터가 담긴 주소값의 묶음의 주솟값을 참조하기 때문 (한 단계를 더 거침)

 

5. null과 undefined의 차이점은 무엇일까요?

null : 비어있음을 나타내는 값

undefined : 변수를 선언만 하고 값이 할당되지 않았을 때의 상태값

// 자바스크립트 자체 버그
typeof null = object;

 

6. 얕은 복사와 깊은 복사는 무엇일까요?

얕은 복사 : 바로 아래 단계의 값만 복사 - 기존 데이터 주소를 그대로 참조,  원본과 사본이 동일한 객체를 참조

깊은 복사 : 내부의 모든 값을 찾아서 전부 복사 - 원본과 사본이 서로 다른 객체를 참조하게 됨 

 

객체를 복사할 때, 객체 내의 모든 값을 복사해 새로운 데이터를 만들 때 객체의 프로퍼티 중에서 그 값에 따라 

기본형 데이터 : 그대로 복사

참조형 데이터 : 다시 그 내부의 프로퍼티를 복사 -> 참조형 데이터가 있을 때마다 재귀적으로 수행해야 함 

 

7. 깊은 복사를 구현 할 수 있는 방법에 대해 설명해 주세요.

1. JSON을 이용해 객체를 JSON 문자열로 전환했다가 다시 JSON 객체로 변환 

2. 재귀함수를 이용 (재귀함수 : 자신을 재참조하는 함수)

 

8. 깊은 복사에 대한 코드를 작성해 주세요.

// JSON 활용
var copyObjectViaJSON = function (target) {
	return JSON.parse(JSON.stringify(target));
}
// 재귀함수
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;
}

 

9. 현대 자바스크립트의 불변성을 지켜야 하는 이유에 대해서 설명해주세요.

값으로 전달받은 객체에 변경을 가하더라도, 원본 객체는 변하지 않아야 하는 경우에 불변 객체가 필요

 

10. 자바스크립트의 object와 비교해서 Map은 어떤 구조를 가지고 있나요?

유사점 : 키가 있는 데이터를 저장

차이점 : 1. 맵은 키에 다양한 자료형을 허용

             2. 맵은 키를 문자형으로 변환하지 않음

             3. 키에는 자료형 제약이 없음

             4. 맵은 키로 객체를 허용