[ES] Array-Like Object

LateMarch·2023년 1월 13일
0

배열

배열은 정렬된 값들의 모음이다. 배열안의 각 값들은 요소(element)라고 하며 각 요소들은 숫자형 위치(numeric position)을 갖는데 이를 index라고 한다. 자바스크립트의 배열은 untyped여서 요소들은 어떤 타입이든 가질 수 있으며 각 요소들이 다른 타입을 가질 수도있다. [JS] Object 에서도 설명했듯이 배열도 마찬가지고 배열 생산자에 의해 정의되어야 한다. 이렇게 되면 선언된 배열은 Array.prototype을 프로토타입으로 갖게 되는데 이 Array.prototypeObject.prototype을 프로토타입으로 갖는 객체이다.

배열같은 객체

배열은 자바스크립트의 다른 객체와 구분시켜주는 몇가지 특징들이 있다.

  • 원소가 추가될 때 length 속성이 자동적으로 갱신(update)된다.
  • 배열의 길이를 요소의 갯수보다 작게 설정하면 배열이 잘린다.
  • Array.prototype의 속성들을 상속받는다.
  • Array.isArray()가 배열에 대해 true값을 반환한다.

하지만 위 특징들은 배열을 정의하는데 필수적인 특징들이 아니다.(다시한번, 배열은 배열 생산자를 통해 선언되어야한다.) 우리가 객체를 만들고 선언함에 따라서 얼마든지 배열과 같은 속성들을 갖는 객체를 만들 수 있다. 아래의 예시코드를 보자.

let a = {}; // Start with a regular empty object
// Add properties to make it "array-like"
let i = 0;
while(i < 10) {
a[i] = i * i;
i++;
}
a.length = i;
// Now iterate through it as if it were a real array
let total = 0;
for(let j = 0; j < a.length; j++) {
total += a[j];
}

일반 객체를 선언하여 length속성을 추가해 배열같은 객체를 만들었지만 이는 배열이 아니다. 하지만 사용자는 여전히 이 배열같은 객체를 배열처럼 쓸 수 있다.

profile
latemarch

0개의 댓글