[JS]CoreJavaScript-Ch1

DevelSopher·2021년 6월 21일
0

1️⃣ Data Type

우선, 데이터 타입은 크게 두가지로 나뉘게 된다.

  • 기본형 : 숫자, 문자, null, undefined, boolean, symbol ...
  • 참조형 : 객체, 배열, 함수, 정규표현식, 날짜 ...
  • 변수 선언과 데이터 할당의 기본적 Flow

    var a;
  • 변수 선언 : 'a'(식별자 이름)로 검색할 수 있는 주소값에 공간을 할당
  • a = 'abc'
  • 데이터 할당: 그 빈 공간에 데이터를 그대로 넣는것이 아니다! 'abc'만의 별도의 메모리 공간을 마련하고 그 주소값을 변수에 저장하는것이다!
  • 변수에 데이터를 직접 넣지 않고 주소값을 넣는 이유는?

    (1) 데이터 수정의 효율성 : 변수에 들어갈 메모리의 크기는 가변적이기 때문이다.
    만약, 데이터를 변수에 그대로 넣는다면 데이터의 크기가 바뀌게 되는경우 변수가 확보한 공간이 바뀌어야 하기 때문이다.

    (2) 중복된 데이터 처리의 효율성 : 중복되는 데이터의 경우 데이터가 저장된 주소값만 반복해서 변수에 할당을 해주면 된다 (수학에서 치환의 개념)

    기본형과 참조형의 차이

    --> false
    a에 저장된 주소값과 b에 저장된 주소값이 달라서 a에는 10, b에는 15가 저장

    반면, --> True

    객체는 참조하는 주소값의 단계가 더있다.
    obj1, obj2는 동일한 주소값을 바라보고 그 주소값의 변수 영역에 주소에 데이터가 c:10 -> c:15로 바뀌기 때문에 obj1과 ob2는 같다고 볼 수 있다.

    흔히들, 기본형 데이터는 불변형 참조형 데이터는 가변형이라고 한다.
    하지만 엄밀히 말하면 참조형 데이터에서의 '가변'은 데이터 자체가 아닌 내부 프로퍼티를 변경할때만 성립한다.

    즉, 데이터 자체를 변경하고자 할땐 기본형, 참조형 모두 불변한다.

    객체를 불변하게 만들어야 할때

    다음 같은 경우를 보자, 본래 만들었던 obj1 객체는 계속 유지를 하고 obj2를 새로 만들어 obj1바탕으로 이름만 바꾸고 싶었지만 obj1도 obj2처럼 바뀌는 경우이다.

    즉, 본 객체는 불변하게 만들어야할때가 있다.

    ❗️객체 얕은 복사

    But, 객체안의 객체 중첩 객체문에는 복사가 적용이 되지 않는다!

    ❗️❗️객체 깊은 복사

    ➕ JSON을 활용한 간단 깊은 복사
    (다만, 메서드나 JSON으로 변경할 수 없는 프로퍼티들은 모두 무시)

    ➕ 각종 라이브러리 사용

    Undefined와 Null의 차이

    Undefined -> 어떤 값이 지정할 것이라고 예상됨에도 불구하고 그렇지 않을때 JS엔진은 undefined를 반환

  • 값이 없는 변수에 접근할때
  • 객체 내부 존재하지 않는 프로퍼티에 접근할때
  • return 문이 없거난 호출되지 않는 함수일때
  • cf) Undefined vs Empty(비어있는 요소)

    비어있는 요소는 순회와 관련있는 배열 메소드(forEach, filter, map, reduce 등)대상에서 제외

    🔮그럼 Null과의 차이점은?

    코딩을 하면서 비어있음을 명시적으로 나타개고 싶을때 사용하는것이 null이다.

    undefined는 우리가 직접 사용하는것이 아니라 JS 엔진이 반환해주는 결과이다.(할수는 있으나 지양하자!)

    profile
    💎다듬고 연마하자👑

    0개의 댓글