자바스크립트에서의 배열은 우리가 알고 있는 자료구조의 배열과 다르다는 말을 들었다.
우선 자료구조 관점에서의 배열을 알아보자.
배열(array)은 같은 자료형의 값들을 메모리상에 연속적으로 저장하는 정적 자료구조다.
자료구조에서의 "진짜 배열"은 중간에 요소가 빠지면 배열이 아니라고 본다.
arr[0], arr[1], arr[2] 순서대로 메모리에 꽉 차 있어야 함자바스크립트에서의 배열은 엄밀히 말해서 위처럼 정의된 일반적 의미의 배열이 아니다.
배열의 동작을 흉내낸 일반 객체일 뿐이다.
자바스크립트 객체의 모든 속성의 설명을 보여주는
Object.getOwnPropertyDescriptors() 메서드를 사용해 배열을 조회해보았다.

0, 1, 2 이렇게 인덱스를 프로퍼티 키로 가지고 있고,
value에 1, 2, 3 이런 식으로 값을 가지고 있으며,
length를 또한 프로퍼티로 갖는 객체임을 확인할 수 있다!
이러한 특징 때문에 자바스크립트에서의 배열은
요소를 위한 각각의 메모리 공간으로 동일한 크기를 갖지 않아도 되며,
당연히 연속적으로 이어져야 한다는 자료구조 배열의 성질을 가지지 않을 수 있다.
조금만 더 나아가서,
기존 연속된 메모리 공간을 가지는 배열을 밀집 배열(Packed Array) 이라고 하며
[1, , 3] 이런 식으로 연속적이지 않은 배열을 희소 배열(Sparse Array) 이라고 한다.
자바스크립트에서
const arr = [1,,3];
console.log(arr);
입력 시

이렇게 empty라 표현된다.
arr[1]을 찍어보면 undefined 가 나오지만 실제 값이 있고 초기화가 되어있지 않은 상태인 undefined는 아니다.
그러나 해당 인덱스의 값이 있는지 확인하는 메서드인 'hasOwnProperty(인덱스)' 를 사용하면 다름을 볼 수 있다.
arr.hasOwnProperty(1); // false
가 나오게 된다.
반면 undefined를 선언해주고 hasOwnProperty를 찍으면 true가 나온다.
