코어 자바스크립트 읽기 (23.11.25)

얕은 복사와 깊은 복사

  • 깊은 복사를 하기 위해서는 참조형 데이터는 그 내부의 프로퍼티들을 복사해야한다.

  • target이 object 타입일때 target을 순회하면서 copyObjectDeep 함수를 실행하여 객체 복사 작업을 진행한다.

  • 이렇게 깊은 복사를 하게되면 원본과 사본이 서로 완전히 다른 객체를 참조하게 되어 어느 프로퍼티를 변경해도 다른쪽에 영향을 주지 않는다.

    • hasOwnProperty를 활용하면 프로토타입 체이닝을 통해 상속된 프로퍼티를 복사하지 않게끔 할 수 있다.

  • 또한 JSON 문법을 사용하여 깊은복사를 할 수 있다.

  • 메서드(함수), __proto__, getter/setter 와 같이 JSON으로 변경할 수 없는 속성은 모두 무시된다.

undefined와 null

undefined는 값이 존재하지 않을 때 자바스크립트 엔진이 자동으로 부여 / 명시적으로 지정하여 사용

자바스크립트 엔진은 사용자가 값을 지정할 것이라고 예상되는 상황에 값을 지정하지 않은 경우 undefined를 반환한다. ex) return 값이 없는 함수를 실행한 경우 함수의 리턴값은 undefined

배열의 경우 조금 다른 동작을 한다.

var arr = [];
arr.length = 3;

console.log(arr); // [empty x 3]
  • 배열의 empty 요소는 순회와 관련이 많은 배열 메서드를 순회 대상에서 제외한다.

  • forEach, map, filter, reduce 메서드를 사용 시 empty 요소에 대해 건너뛴다.

  • 존재하지 않는 속성에 대해 순회할 수 없는것이 당연한 것.

  • 객체와 동일하게 특정 인덱스에 값을 지정할 때 빈 공간을 확보하고 인덱스를 이름으로 지정하고 데이터의 주솟값을 지정하는 등의 동작을 하는데, 값을 지정하지 않은 인덱스는 아직 존재하지 않는 속성이기 떄문이다. (어딘가에 할당되지 않음)

  • undefined는 해당 변수, 인덱스에 할당되는 값이므로 존재하지 않음을 의미한다.

Last updated