2045 votes

Comment voulez-vous vérifier si une variable est un tableau en JavaScript?

Je voudrais vérifier si une variable est soit un tableau, ou même une seule valeur en JavaScript.

J'ai trouvé une solution...

if (variable.constructor == Array)...

Est-ce la meilleure façon, cela peut être fait?

1143voto

Brett Bender Points 12744

Vous pouvez également utiliser:

if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}

Cela me semble être une solution assez élégante, mais à chacun ses goûts.

80voto

Peter Smit Points 5655

Il existe de multiples solutions à tous leurs caprices. Cette page donne un bon aperçu. Une solution possible est:

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

75voto

Andy McCluggage Points 8583

J'ai remarqué que quelqu'un a mentionné jQuery, mais je ne savais pas qu'il était un isArray() fonction. Il s'avère qu'il a été ajouté dans la version 1.3.

jQuery met en œuvre, comme le suggère Peter:

isArray: function( obj ) {
    return toString.call(obj) === "[object Array]";
},

Après avoir mis beaucoup de foi dans jQuery déjà (en particulier leurs techniques pour la compatibilité inter-navigateur) je vais mettre à niveau vers la version 1.3 et l'utilisation de leur fonction (à condition que la mise à niveau ne cause pas trop de problèmes) ou d'utiliser cette méthode proposée directement dans mon code.

Merci beaucoup pour les suggestions.

55voto

Ibu Points 17457

C'est une vieille question, mais ayant le même problème, j'ai trouvé un très élégant solution que j'ai envie de partager.

L'ajout d'un prototype de Tableau, il est très simple

Array.prototype.isArray = true;

Maintenant si vous avez un objet que vous souhaitez tester pour voir si son un tableau tous vous avez besoin est de vérifier pour la nouvelle propriété

var box = doSomething();

if (box.isArray) {
    // do something
}

isArray n'est disponible que si son un tableau

47voto

Hank Gay Points 36173

Via Crockford:

function typeOf(value) {
    var s = typeof value;
    if (s === 'object') {
        if (value) {
            if (value instanceof Array) {
                s = 'array';
            }
        } else {
            s = 'null';
        }
    }
    return s;
}

Le principal défaut de Crockford mentionne, c'est une incapacité à déterminer correctement les tableaux qui ont été créés dans un contexte différent, par exemple, window. Cette page est une version bien plus perfectionnée si cela est insuffisant.

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