web-dev-qa-db-fra.com

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

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.

48
Alex
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))
    ...
65
Casey Chu

Voici l'approche que jQuery 1.4.2 utilise:

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

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);
}
5
GerManson

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

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).

1
CMS