자바스크립트의 유사배열(array-like) 객체란, 배열과 비슷하게 인덱스를 통한 접근이 가능하고, length
프로퍼티도 가지고 있는 객체를 의미한다.
Array
나 배열 리터럴 []
을 통해 만들어지지 않았다. 따라서, Array.prototype
을 상속받지 않기 때문에, push()
, pop()
과 같이 배열과 관련된 메소드를 사용할 수 없다.length
프로퍼티가 자동으로 업데이트 되지 않는다.isArray()
메소드를 통해 유사 배열과 배열을 구별해낼 수 있다.
const arr_like = { 0: 'I', 1: 'am', 2: 'array-like', length: 3 };
Array.isArray(arr_like); // returns false
유사배열 객체는 배열 메소드를 사용할 수 없는데, 배열로 변환하여 배열 메소드를 사용할 수 있도록 할 수 있다.
Array.from()
메소드 사용하기let arrayLike = { 0: 'a', 1: 'b', length: 2 };
let realArray = array.from(arrayLike);
console.log(realArray); // Outputs: [ 'a', 'b' ]
let arrayLike = { 0: 'a', 1: 'b', length: 2 };
let realArray = [ ...arrayLike ];
console.log(realArray); // Outputs: [ 'a', 'b' ]
유사 배열은 자바스크립트 언어에서 굉장히 자주 쓰이기 때문에, 배열로 생각하게 된다면 버그를 만날 수도 있다.
arguments
객체function showArguments() {
console.log(arguments);
}
showArguments(1, 2, 3);
// [Arguments] { '0': 1, '1': 2, '2': 3 }
const arr_like = { 0: 'I', 1: 'am', 2: 'array-like', length: 3 };
arr_like[2]; // returns array-like
arr_like.length; // returns 3
📚 참고자료