이름 그대로 배열과 유사한 객체를 유사 배열, 영어로는 Array-Like Object라고 한다.
유사 배열의 최소 조건은 다음과 같다.
배열은 각 요소에 0부터 순서대로 매겨진 index를 통해 요소끼리의 관계도 파악할 수 있고 그 index를 통해 요소에 접근할 수 도 있다는 특징이 있다.
유사 배열도 마찬가지로 배열이라는 이름에 걸맞게 각 요소에 0부터 시작하는 숫자 형태의 index가 있어야 한다.
객체가 가지고 있는 요소의 갯수를 저장하는 length
프로퍼티도 역시 배열의 특징이다. 유사 배열 역시 length
프로퍼티가 있어야 비로소 유사 배열이라고 할 수 있다. 숫자 형태의 index가 있더라도 length
프로퍼티가 없다면 유사 배열이라기 보단 그냥 숫자 형태의 key로 구성된 일반적인 객체라고 볼 수 있다.
유사 배열이 완전한 배열이 아닌 가장 큰 이유는 바로 기본적인 배열의 메소드를 사용할 수 없다는 점 때문이다. 배열의 메소드를 활용할 수 없다는 특징이 유사 배열을 활용하는 목적이 되기도 한다. indexing을 통해 유사 배열의 요소에 접근하는 건 쉽지만 수정하거나 삭제하는 작업이 까다롭다.
그래서 내부의 요소들은 배열처럼 다룰 수 있게 하면서 배열의 메소드 사용을 막고 싶거나, 혹은 일반 배열에는 없는 특별한 메소드를 제공하고 싶을 때 유사 배열을 만들어 활용하기도 한다.
Array
객체의 isArray
메소드는 파라미터로 전달한 값이 배열인지 아닌지를 평가해서 그 결과를 불린 형태의 값으로 리턴해주는 메소드이다.
유사 배열은 배열과 비슷하지만 배열은 아니기 때문에 결괏값이 false
이다.
유사 배열은 위의 특징들을 가진 대부분의 형태를 가리키는 포괄적인 개념이기 때문에 정말 다양한 형태로 존재할 수 있다.
HTMLCollection의 경우 for..of 문을 활용하는 데 문제가 없었지만 어떤 유사 배열의 경우에는 for..of문을 활용할 수 없는 경우도 있다.
배열의 기본 메소드를 사용할 수 없다고 했지만, 직접 구현해서 마치 배열처럼 사용할 수 있도록 만들 수도 있다.
하지만 직접 유사 배열을 만드는 게 아니라 이미 만들어진 유사 배열에 접근하는 경우에는 대부분 위 4가지 특징을 모두 갖고 있다.
출처 : 코드잇