48 votes

Détecter si le paramètre transmis est un tableau? Javascript

Dupliquer possible:
Comment détecter si une variable est un tableau

J'ai une question simple:

Comment détecter si un paramètre transmis à ma fonction javascript est un tableau? Je ne crois pas pouvoir tester:

 if (typeof paramThatCouldBeArray == 'array') 
 

Alors est-ce possible?

Comment pourrais-je le faire?

Merci d'avance.

68voto

Casey Chu Points 8804
if (param instanceof Array)
    ...

18voto

James Westgate Points 6789

C'est l'approche utilisée par jQuery 1.4.2:

 var toString = param.prototype.toString;
var isArray = function(obj) {
        return toString.call(obj) === "[object Array]";
    }
 

5voto

GerManson Points 3238

J'ai trouvé ça ici :

 function isArray(obj) {
    return obj.constructor == Array; 
}
 

aussi celui-ci

 function isArray(obj) {
    return (obj.constructor.toString().indexOf("Array") != -1);
}
 

1voto

CMS Points 315406

Quelques jours auparavant, j'ai été la construction d'une simple détection du type de fonction, c'est peut-être utile pour vous:

Utilisation:

//...
if (typeString(obj) == 'array') {
  //..
}

Mise en œuvre:

function typeString(o) {
  if (typeof o != 'object')
    return typeof o;

  if (o === null)
      return "null";
  //object, array, function, date, regexp, string, number, boolean, error
  var internalClass = Object.prototype.toString.call(o)
                                               .match(/\[object\s(\w+)\]/)[1];
  return internalClass.toLowerCase();
}

La deuxième variante de cette fonction est plus stricte, car elle renvoie uniquement les types d'objet décrit dans la spécification ECMAScript (sortie possible des valeurs: "object", "undefined", "null", et "function", "array", "date", "regexp", "string", "number", "boolean" "error", à l'aide de l' [[Class]] propriété interne).

1voto

outis Points 39377

Vous pouvez tester la propriété constructor :

 if (param.constructor == Array) {
    ...
}
 

Bien que cela inclue les objets qui ont un prototype de tableau,

 function Stack() {
}
Stack.prototype = [];
 

à moins qu'ils ne définissent également le constructeur:

 Stack.prototype.constructor = Stack;
 

ou:

 function Stack() {
    this.constructor = Stack;
}
 

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