6 votes

Quelle est la meilleure façon de vérifier si un objet est un tableau ou non en Javascript ?

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

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

Et dites que j'appelle foo(1) comment puis-je savoir si elle renvoie un tableau ou non ?

16voto

CMS Points 315406

J'utilise cette fonction :

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

C'est la façon dont jQuery.isArray est mis en œuvre.

Consultez cet article :

3voto

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

Mise à jour : Je dois répondre aux commentaires faits ci-dessous, car les gens continuent de prétendre que cela ne marchera pas sans l'essayer eux-mêmes...

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

2voto

Gordon Gustafson Points 14778

Voici un moyen très fiable, tiré de Javascript : the good parts, 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 vous suggère de l'intégrer 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; }
}

2voto

IliasT Points 1566

A partir de ES5, il y a isArray .

Array.isArray([])  // true

-1voto

Baldráni Points 215

Pour rendre votre solution plus générale, vous pouvez ne pas vous soucier de savoir s'il s'agit réellement d'un objet Array. Par exemple, document.getElementsByName() renvoie un objet qui "agit comme" un tableau. La "conformité au tableau" peut être supposée si l'objet possède une propriété "length".

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X