Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트에서 객체가 배열인지 확인하는 방법

자바스크립트에서 어떤 객체가 배열인지 확인해야 하는 경우가 자주 있습니다. 예를 들어, 함수 인자로 전달된 값이 배열인지 판별하거나, 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 형태로 배열 여부를 판별할 수도 있습니다. 다만 이 방법은 모든 객체에 대해 동작하지 않는다는 점에 주의해야 합니다. undefinednull에는 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()를 활용하는 것을 권장합니다.