유사배열, 이터러블 그리고 배열

자바스크립트는 6가지 원시 타입이 있으며, 그 외에는 모두 객체 타입이다. 따라서 배열도 객체 중 하나라고 볼 수 있다. 그러나 객체와 배열은 기본적으로 다음과 같은 서로다른 특징이 있다.

Object Array
structure key & value index & element
reference property key index
order X O
length property X O

가장 큰 차이로는, 순서와 length property 유무다.

*이터러블(iterable) : 순회가 가능하고, 메서드 Symbol.iterator가 구현된 객체*

*유사 배열 (array-like) : 인덱스와 length 프로퍼티가 있어서 배열처럼 보이는 객체*

아래 예시의 객체는 유사 배열 객체이긴 하지만 이터러블 객체가 아니다.

let arrayLike = { *// 인덱스와 length property가 있음 -> 유사 배열*
	0: "Hello",
	1: "World",
	length: 2
};
arrayLike[0] // "Hello"
arrayLike.length // 2

for(let item of arrayLike) {} *// Symbol.iterator 가 없으므로 에러 발생*

*이터러블유사 배열은 배열이 아니기 때문에 push, pop 등의 메서드를 지원하지 않는다.*

*이터러블유사 배열을 배열처럼 다루고 싶을 때 이런 특징은 불편함을 초래하게 된다.*

예를 들어, arrayLike 에 배열 메서드를 사용해 무언가를 하고 싶을 때처럼 말이다.

어떻게 하면 이터러블과 유사 배열에 배열 메서드를 적용할 수 있을까? 정답은 유사배열을 진짜 배열로 변환해주면 된다.

배열은 아래 4가지 방법으로 생성할 수 있다.