반응형
유사배열
- 유사배열은 배열과 비슷하게 생겼지만 진짜 배열은 아닌 객체
즉, 배열처럼 인덱스(0, 1, 2...)와 length 프로퍼티가 있어서 배열처럼 접근할 수 있지만,
배열 메서드(Array.prototype 메서드)는 없는 객체
특징
- 인덱스로 요소에 접근 가능 (ex, obj[0], obj[1])
- length 속성 존재
- 배열 고유 메서드(ex: push(), pop(), forEach())를 사용할 수 없음
- 반복문 접근 가능(for, while)
- 일반 객체이므로 배열 메서드를 바로 사용할 수 없음
- Array.from() 또는 전개 연산자 ...로 배열로 변환 가능
- 유사배열을 진짜 배열로 만들어야 배열 메서드를 쓸 수 있음
- Array.from() 함수나 [...obj] (이터러블인 경우)로 변환 가능
- 반복문으로 접근 가능
- 유사배열은 인덱스로 접근 가능하기 때문에 for 문이나 while 문으로 순회할 수 있음
다만 for...of 문법은 유사배열 객체가 이터러블(iterable)일 때만 사용가능- 예를 들어 NodeList는 이터러블이어서 for...of 가능
- arguments 객체는 이터러블이 아니라서 for...of 불가능
- 유사배열은 인덱스로 접근 가능하기 때문에 for 문이나 while 문으로 순회할 수 있음
- 배열과 다르게 내부 프로퍼티(심볼 등)는 없음
- 객체타입 ( typeof 결과는 "object"(일반 객체)이고, 배열의 경우 "object"(배열 타입))
유사배열과 배열 차이
구분 | 배열(Array) | 유사배열(array-like object) |
타입 | object (배열 타입) | object (일반 객체) |
메서드 | push(), pop(), forEach() 등 배열 메서드 보유 | 배열 메서드 없음 |
인덱스 접근 | O | O |
length 프로퍼티 | O | O |
순회 가능 여부 | O | for, for...of (NodeList 등 일부 유사배열은 순회 가능) |
변환 필요성 | 없음 | 필요 (배열 메서드 사용 시 배열로 변환 필요) |
주요 유사배열의 종류
arguments 객체
- 함수 안에서 자동으로 생성되는, 함수 인자들을 담고 있는 유사 배열.
DOM 메서드 결과
1) HTMLCollection
- document.getElementsByTagName(), document.getElementsByClassName() 같은 DOM 메서드가 반환.
- 실시간으로 DOM 변화 반영.
2) NodeList
- document.querySelectorAll() 등이 반환.
- 정적(Static)이 기본 (변경 반영 안 됨).
- 일부 메서드(forEach)는 사용 가능하지만 배열은 아님
문자열 (String)
- 문자열도 인덱스로 접근 가능 + length 있음.
- 하지만 불변(immutable)이라 수정 불가
Rest Parameters 전(구) 시절 패턴
- ES6 이전에는 함수 인자를 다루기 위해 배열 대신 유사 배열(arguments)을 많이 사용.
- 지금은 ...rest 문법으로 대체 가능.
사용자가 만든 유사 배열 객체
- length 속성과 인덱스를 직접 부여해서 만들 수 있음.
const pseudoArray = {0: 'apple', 1: 'banana', length: 2};
console.log(pseudoArray[0]); // apple
console.log(pseudoArray.length); // 2
유사배열을 진짜 배열로 변환하는 방법
1. Array.from()
const arr = Array.from(arguments);
arr.forEach(item => console.log(item));
2.전개 연산자(...)
const arr = [...nodeList];
arr.forEach(item => console.log(item));
3. Array.prototype.slice.call
const arr = Array.prototype.slice.call(arguments);
arr.forEach(item => console.log(item));
반응형
'JS > Javascript' 카테고리의 다른 글
[javascript] arguments (0) | 2025.08.11 |
---|---|
[javascipt] 일반함수와 화살표 함수에서의 this (1) | 2025.08.11 |
[javascript] 콜백 함수(callback function) (4) | 2025.08.08 |
[javascript] 전개 연산자(Spread Operator) (4) | 2025.08.06 |
[javascript] 나머지 매개변수(rest parameter) (...args) (3) | 2025.08.01 |