Javascript에서 객체가 배열인지 확인하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1202841

문제

다음과 같은 기능이 있다고 가정해 보겠습니다.

function foo(bar) {
    if (bar > 1) {
       return [1,2,3];
    } else {
       return 1;
    }
}

그리고 내가 전화한다고 말해요 foo(1), 배열을 반환하는지 여부를 어떻게 알 수 있나요?

도움이 되었습니까?

해결책

이 기능을 사용합니다.

function isArray(obj) {
  return Object.prototype.toString.call(obj) === '[object Array]';
}

그 방법입니다 jQuery.isarray 구현되었습니다.

이 기사를 확인하십시오 :

다른 팁

if(foo(1) instanceof Array)
    // You have an Array
else
    // You don't

업데이트: 사람들이 여전히 스스로 시도해보지 않으면 작동하지 않을 것이라고 주장하고 있기 때문에 아래 댓글에 답변해야 합니다.

일부 다른 개체의 경우 이 기술이 작동하지 않습니다(예:""instanceof String == false), 그러나 이것은 Array에서 작동합니다.IE6, IE8, FF, Chrome 및 Safari에서 테스트했습니다. 아래에 댓글을 달기 전에 직접 사용해 보고 확인해 보세요.

다음은 JavaScript에서 가져 오는 매우 신뢰할 수있는 방법 중 하나입니다. O'Reilly가 출판 한 The Good Parts :

if (my_value && typeof my_value === 'object' &&  typeof my_value.length === 'number' &&
!(my_value.propertyIsEnumerable('length')) { // my_value is truly an array! }

나는 당신 자신의 기능으로 그것을 포장하는 것이 좋습니다.

function isarray(my_value) {

    if (my_value && typeof my_value === 'object' &&  typeof my_value.length === 'number' &&
        !(my_value.propertyIsEnumerable('length')) 
         { return true; }
    else { return false; }
}

ES5가 있습니다 isArray.

Array.isArray([])  // true

솔루션을보다 일반적으로 만들려면 실제로 배열 객체인지 신경 쓰지 않을 수 있습니다. 예를 들어, document.getEmentsByName ()은 "배열처럼 작용하는"개체를 반환합니다. 객체에 "길이"속성이있는 경우 "배열 준수"를 가정 할 수 있습니다.

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top