[JS] 유사 배열(Array-Like Object)이란?

스머리·2023년 8월 8일
0

JavaScript

목록 보기
8/23

유사 배열(Array-Like Object)이란?

이름 그대로 배열과 유사한 객체를 유사 배열, 영어로는 Array-Like Object라고 한다.
유사 배열의 최소 조건은 다음과 같다.

1. 숫자 형태의 indexing이 가능하다.

배열은 각 요소에 0부터 순서대로 매겨진 index를 통해 요소끼리의 관계도 파악할 수 있고 그 index를 통해 요소에 접근할 수 도 있다는 특징이 있다.
유사 배열도 마찬가지로 배열이라는 이름에 걸맞게 각 요소에 0부터 시작하는 숫자 형태의 index가 있어야 한다.

2. length 프로퍼티가 있다.

객체가 가지고 있는 요소의 갯수를 저장하는 length프로퍼티도 역시 배열의 특징이다. 유사 배열 역시 length프로퍼티가 있어야 비로소 유사 배열이라고 할 수 있다. 숫자 형태의 index가 있더라도 length프로퍼티가 없다면 유사 배열이라기 보단 그냥 숫자 형태의 key로 구성된 일반적인 객체라고 볼 수 있다.

3. 배열의 기본 메소드를 사용할 수 없다.

유사 배열이 완전한 배열이 아닌 가장 큰 이유는 바로 기본적인 배열의 메소드를 사용할 수 없다는 점 때문이다. 배열의 메소드를 활용할 수 없다는 특징이 유사 배열을 활용하는 목적이 되기도 한다. indexing을 통해 유사 배열의 요소에 접근하는 건 쉽지만 수정하거나 삭제하는 작업이 까다롭다.

그래서 내부의 요소들은 배열처럼 다룰 수 있게 하면서 배열의 메소드 사용을 막고 싶거나, 혹은 일반 배열에는 없는 특별한 메소드를 제공하고 싶을 때 유사 배열을 만들어 활용하기도 한다.

4. Array.isArray(유사배열)은 false다.

Array객체의 isArray 메소드는 파라미터로 전달한 값이 배열인지 아닌지를 평가해서 그 결과를 불린 형태의 값으로 리턴해주는 메소드이다.
유사 배열은 배열과 비슷하지만 배열은 아니기 때문에 결괏값이 false이다.

주의사항: 유사 배열은 다양하다!

유사 배열은 위의 특징들을 가진 대부분의 형태를 가리키는 포괄적인 개념이기 때문에 정말 다양한 형태로 존재할 수 있다.
HTMLCollection의 경우 for..of 문을 활용하는 데 문제가 없었지만 어떤 유사 배열의 경우에는 for..of문을 활용할 수 없는 경우도 있다.
배열의 기본 메소드를 사용할 수 없다고 했지만, 직접 구현해서 마치 배열처럼 사용할 수 있도록 만들 수도 있다.
하지만 직접 유사 배열을 만드는 게 아니라 이미 만들어진 유사 배열에 접근하는 경우에는 대부분 위 4가지 특징을 모두 갖고 있다.




출처 : 코드잇

profile
꾸준히 나아가는 프론트엔드 개발자

0개의 댓글