Duplicata possible:
Comment détecter si une variable est un tablea
J'ai une question simple:
Comment détecter si un paramètre transmis à ma fonction javascript est un tableau? Je ne pense pas pouvoir tester:
if (typeof paramThatCouldBeArray == 'array')
Est-ce donc possible?
Comment le ferais-je?
Merci d'avance.
if (param instanceof Array)
...
Modifier. Depuis 2016, il existe une méthode prête à l'emploi qui capture plus de cas d'angle, Array.isArray
, utilisé comme suit:
if (Array.isArray(param))
...
Voici l'approche que jQuery 1.4.2 utilise:
var toString = param.prototype.toString;
var isArray = function(obj) {
return toString.call(obj) === "[object Array]";
}
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);
}
Vous pouvez tester la propriété constructor
:
if (param.constructor == Array) {
...
}
Bien que cela inclue des 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;
}
Quelques il y a jours Je construisais une fonction simple de détection de type , peut-être utile pour vous:
Usage:
//...
if (typeString(obj) == 'array') {
//..
}
La mise en oeuvre:
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();
}
deuxième variante de cette fonction est plus stricte, car elle ne renvoie que les types d'objets décrits dans la spécification ECMAScript (valeurs de sortie possibles: "object"
, "undefined"
, "null"
, et "function"
, "array"
, "date"
, "regexp"
, "string"
, "number"
, "boolean"
"error"
, en utilisant le [[Class]]
propriété interne).