Question

Dites que j'ai une fonction comme celle-ci:

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

Et si j'appelle foo (1) , comment puis-je savoir s'il renvoie ou non un tableau?

Était-ce utile?

La solution

J'utilise cette fonction:

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

C’est ainsi que jQuery.isArray est mis en œuvre.

Consultez cet article:

Autres conseils

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

Mise à jour: je dois répondre aux commentaires formulés ci-dessous, car les gens prétendent toujours que cela ne fonctionnera pas sans l'avoir essayé par eux-mêmes ...

Pour certains autres objets, cette technique ne fonctionne pas (par exemple, "" instance of String == false), mais cela fonctionne pour Array. Je l'ai testé dans IE6, IE8, FF, Chrome et Safari. Essayez-le et constatez-le par vous-même avant de commenter ci-dessous.

Voici un moyen très fiable, emprunté à Javascript: les bonnes parties, publié par O'Reilly:

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

Je suggérerais de l'envelopper dans votre propre fonction:

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

Depuis ES5, il existe isArray .

Array.isArray([])  // true

Pour que votre solution soit plus générale, vous pouvez ne pas vous soucier de savoir s’il s’agit bien d’un objet Array. Par exemple, document.getElementsByName () renvoie un objet qui "agit comme" " un tableau. " Array compliance " peut être supposé si l'objet a une "longueur" propriété.

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top