자바스크립트는 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가지 방법으로 생성할 수 있다.
[]
)