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

Kyoorim LEE·2022년 7월 16일
0

1. 데이터 타입 종류

기본형 (Primitive Type)

  • 숫자, 문자열, 불리언, null, undefined, 심볼 등

참조형 (Reference Type)

  • 객체, 배열, 함수, 날짜, 정규표현식 등

2. 기본형 데이터와 참조형 데이터

객체의 프로퍼티 변경 시

let a = 10;
let b = a;
let obj1 = {c:10, d:'ddd'};
let obj2 = obj1

b = 15;
obj2.c = 20;


1. 변수 b에 새로운 데이터를 할당하여 주소값이 바뀜
2. obj2의 프로퍼티 값이 하나 바뀌었으므로, 해당 프로퍼티의 주소값은 새 데이터의 주소값으로 바뀌었으나 객체 자체의 주소값은 바뀌지 않아 obj1과 obj2의 주소값은 여전히 동일함
3. 프로퍼티의 주소값이 아예 새로운 데이터 주소값으로 바뀌어 버림 => '가변'

객체 자체 변경 시

let a = 10;
let b = a;
let obj1 = {c:10, d:'ddd'};
let obj2 = obj1

b = 15;
obj2 = {c: 20, d: 'ddd'};


1. 객체의 프로퍼티 변경이 아닌 새로운 객체를 할당함으로써 주소값이 새로 변경됨
2. 기존 객체의 프로퍼티 값에는 변화가 없음
3. 새로운 객체에 대한 새로운 주소값을 받음

'가변' 참조형 데이터 자체를 바꿀때에는 적용되는 말이 아님 => 기존 데이터 값에는 변화가 없으므로!

3. 불변 객체

참조형 데이터의 '가변'은 데이터 자체가 아니라 내부 프로퍼티를 바꿀때에만 성립함

얕은 복사와 깊은 복사

얕은 복사

바로 아래 단계의 값만 복사하는 방법

let copyShallowObject = function(target) {
  let result = {};
  for(let prop in target) {
    result[prop] = target[prop];
  }
  return result;
};

깊은 복사

내부의 모든 값들을 하나하나 찾아서 전부 복사하는 방법

let user = {
  name: 'Kyoorim',
  urls: {
    lastName : 'LEE',
    favoriteFood: 'greek yogurt',
    favoritePuppy: 'zzang'
  }
}
//urls 내부 프로퍼티까지 다 바꾸는 복사 

객체의 깊은 복사를 수행하는 범용 함수

  • 단 메서드(함수)나 숨겨진 프로퍼티인 __proto__getter/setter등과 같이 JSON으로 변경할 수 없는 프로퍼티들은 복사가 되지 않음
let copyDeepObject - function (target) {
  let result = {};
  if(typeof target === 'object' && target !== null) {
    for(let prop in target) {
      result[prop]= copyDeepObject(target[prop]);
    }
  }else {
    result = target;
  }
  return result;
}

4. undefined과 null

undefined

어떤 변수에 값을 지정할 수 있지만 지정하지 않았을 때, 즉 바구니는 있지만 바구니에 아무것도 없을 때

  1. 값을 대입하지 않은 변수
  2. 객체 내부에 존재하지 않는 프로퍼티에 접근하려고 할 때
  3. return문이 없거나 호출되지 않는 함수의 실행 결과

null

애초에 값이 비어있는 경우, 바구니 자체가 없는 경우

profile
oneThing

0개의 댓글