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

JavaScript에서 배열이 실제 배열인지 확인하는 방법

자바스크립트(JavaScript)에서 배열은 엄밀히 말해 '진짜 배열'이 아닙니다. 사실 배열은 자바스크립트의 객체(object)에 해당합니다. 따라서 typeof() 연산자로 데이터 타입을 확인하면 배열이라 하더라도 항상 object가 출력됩니다.

typeof() 연산자의 문법

typeof(operand);

매개변수typeof() 연산자는 하나의 피연산자(operand)를 받아 해당 값의 데이터 타입을 문자열로 반환합니다.

아래 예제에서 변수 a는 분명 배열이지만, typeof() 연산자는 object를 반환합니다. 모든 배열이 근본적으로 객체이기 때문입니다. 빈 객체 b 역시 마찬가지로 object로 판별됩니다.

예제 코드

<html>
<body>
<script>
    var a = [1,2,5,"hello"];
    document.write(typeof(a));
    var b = {};
    document.write("</br>");
    document.write(typeof(b));
</script>
</body>
</html>

실행 결과

object
object

이처럼 typeof()만으로는 배열과 일반 객체를 구분할 수 없습니다. 이 문제를 해결하기 위해 자바스크립트는 배열 여부를 정확히 판별하는 전용 메서드를 제공합니다.

Array.isArray() 메서드 사용하기

typeof() 연산자와 달리, Array.isArray() 메서드는 전달된 매개변수가 배열인지 아닌지를 정확하게 검사합니다. 매개변수가 배열이면 true를, 그렇지 않으면 false를 반환합니다.

문법

Array.isArray(array);

아래 예제에서는 배열 a와 객체 b를 각각 Array.isArray() 메서드에 전달했습니다. 이 메서드는 두 값을 검사한 뒤, 배열인 a에 대해서는 true, 객체인 b에 대해서는 false를 출력합니다.

예제 코드

<html>
<body>
<script>
    var a = [1,2,5,"hello"];
    var res1 = Array.isArray(a);
    document.write(res1);
    document.write("</br>");
    var b = {};
    var res2 = Array.isArray(b);
    document.write(res2);
</script>
</body>
</html>

실행 결과

true
false

참고: 다른 판별 방법

ES5 이전의 오래된 환경에서는 Array.isArray()를 지원하지 않을 수 있습니다. 이 경우 Object.prototype.toString.call()을 활용하면 배열 여부를 확인할 수 있습니다.

Object.prototype.toString.call([1,2,3]) === '[object Array]'; // true
Object.prototype.toString.call({}) === '[object Array]';      // false

또한 instanceof 연산자(value instanceof Array)로도 배열을 판별할 수 있지만, 서로 다른 실행 환경(예: iframe) 간에는 정확하지 않을 수 있으므로 일반적으로 Array.isArray()를 사용하는 것이 가장 안전하고 권장되는 방법입니다.