자바스크립트에서 어떤 객체가 배열인지 확인해야 하는 경우가 자주 있습니다. 예를 들어, 함수 인자로 전달된 값이 배열인지 판별하거나, API 응답 데이터를 처리하기 전에 타입을 검증할 때 유용합니다. 이번 글에서는 객체가 배열인지 확인하는 대표적인 방법들을 살펴보겠습니다.
1. Array.isArray() 사용하기
가장 권장되는 방법은 Array.isArray() 메서드를 사용하는 것입니다. 이 메서드는 ES5부터 도입되었으며, 모든 최신 브라우저에서 지원됩니다. 전달된 값이 배열이면 true, 아니면 false를 반환하며, null이나 undefined 같은 값에도 안전하게 동작한다는 장점이 있습니다.
예제
console.log(Array.isArray(undefined)) // false
console.log(Array.isArray(null)) // false
console.log(Array.isArray("")) // false
console.log(Array.isArray({})) // false
console.log(Array.isArray([])) // true
console.log(Array.isArray([1, "hello"])) // true
console.log(Array.isArray(new Array())) // true출력 결과
false false false false true true true
2. constructor 속성으로 확인하기
객체의 constructor 속성을 활용하여 arr.constructor === Array 형태로 배열 여부를 판별할 수도 있습니다. 다만 이 방법은 모든 객체에 대해 동작하지 않는다는 점에 주의해야 합니다. undefined나 null에는 constructor 속성이 존재하지 않기 때문에 접근 시 오류가 발생하며, 서로 다른 실행 환경(예: iframe) 간에 객체를 주고받는 경우에도 정확한 결과를 보장하지 못합니다.
예제
// 아래 코드는 오류 발생: console.log(undefined.constructor === Array)
// 아래 코드는 오류 발생: console.log(null.constructor === Array)
console.log("".constructor === Array)
console.log({}.constructor === Array)
console.log([].constructor === Array)
console.log([1, "hello"].constructor === Array)
console.log(new Array().constructor === Array)출력 결과
false false true true true
정리
두 방법을 비교해 보면, Array.isArray()는 어떤 값에도 안전하게 사용할 수 있고 크로스 환경 문제도 없기 때문에 실무에서는 이 방법을 사용하는 것이 가장 좋습니다. constructor 체크 방식은 참고용으로만 알아두고, 가능하면 표준 메서드인 Array.isArray()를 활용하는 것을 권장합니다.