Pergunta

Say Eu tenho uma função assim:

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

E dizer eu chamo foo(1), como eu sei que retorna um array ou não?

Foi útil?

Solução

Eu uso essa função:

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

é o caminho que jQuery.isArray é implementado.

Verifique este artigo:

Outras dicas

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

Update: eu tenho que responder aos comentários feitos a seguir, porque as pessoas ainda estão alegando que isto não vai funcionar sem tentar isso por si ...

Para alguns outros objetos esta técnica não funciona (por exemplo, "" instanceof Cordas == false), mas isso funciona para Matriz. Eu testei no IE6, IE8, FF, Chrome e Safari. Experimente e veja por si mesmo antes de comentar abaixo.

Aqui está uma maneira muito confiável, tirar de Javascript: as partes boas, publicado pela O'Reilly:

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

Eu sugeriria envolvê-lo em sua própria função:

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

Como de ES5 há isArray .

Array.isArray([])  // true

Para tornar a sua solução mais geral, você pode não se importar se é realmente um objeto Array. Por exemplo, document.getElementsByName () retorna a um objecto que "actua como" uma matriz. "Cumprimento matriz" pode ser assumida se o objeto tem uma propriedade "comprimento".

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top