Pregunta

Diga que tengo una función como esta:

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

Y digamos que llamo foo (1) , ¿cómo puedo saber si devuelve una matriz o no?

¿Fue útil?

Solución

Uso esta función:

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

Es la forma en que se implementa jQuery.isArray .

Revisa este artículo:

Otros consejos

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

Actualización: Tengo que responder a los comentarios que se hacen a continuación, porque las personas siguen diciendo que esto no funcionará sin probarlo por sí mismos ...

Para algunos otros objetos, esta técnica no funciona (por ejemplo, " " instanceof String == false), pero esto funciona para Array. Lo probé en IE6, IE8, FF, Chrome y Safari. Pruébalo y compruébalo por ti mismo antes de comentar a continuación.

Aquí hay una manera muy confiable, tome de Javascript: las partes buenas, publicadas por O'Reilly:

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

Sugeriría envolverlo en tu propia función:

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; }
}

A partir de ES5 hay isArray .

Array.isArray([])  // true

Para que su solución sea más general, es posible que no le importe si es realmente un objeto Array. Por ejemplo, document.getElementsByName () devuelve un objeto que " actúa como " una matriz. " Cumplimiento de matrices " se puede asumir si el objeto tiene una " longitud " propiedad.

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top