Comment devrais-je détecter si l'argument est un tableau parce que typeof []
renvoie 'object'
et que je souhaite faire la distinction entre des tableaux et des objets.
Il est possible que l’objet ressemble à {"0":"string","1":"string","length":"2"}
mais je ne veux pas qu’il apparaisse sous forme de tableau s’il s’agit d’un objet ressemblant à un tableau.
JSON.parse
et JSON.stringify
peuvent faire cette distinction. Comment puis-je le faire?
J'utilise Node.JS, qui est basé sur V8 et identique à Chrome.
Array.isArray
fonction V8 native. C'est rapide, c'est toujours correct. Cela fait partie de ES5.
arr instanceof Array
Vérifie si l'objet a été créé avec le constructeur de tableau.
Une méthode de soulignement. Voici un extrait tiré de la source
var toString = Object.prototype.toString,
nativeIsArray = Array.isArray;
_.isArray = nativeIsArray || function(obj) {
return toString.call(obj) === '[object Array]';
};
Cette méthode prend un objet et appelle la méthode Object.prototype.toString
dessus. Cela retournera toujours [object Array]
pour les tableaux.
D'après mon expérience personnelle, demander la méthode toString
est la méthode la plus efficace, mais elle n'est pas aussi courte et lisible que instanceof Array
et n'est pas aussi rapide que Array.isArray
.
Personnellement, je vous recommande d’essayer d’utiliser underscore
, qui est une bibliothèque contenant des méthodes d’utilité communes. Il a beaucoup de fonctions utiles qui DRY améliorent votre code.
Essayez ce code:
Array.isArray(argument)
Il me semble que cette question a plusieurs bonnes réponses, mais pour être complet, j’ajouterais une autre option, qui n’a pas été suggérée plus tôt.
Afin de vérifier si quelque chose est un tableau, vous pouvez utiliser le module natif util
de Node.js et sa fonction isArray()
.
Exemple:
var util = require('util');
util.isArray([]); // true
util.isArray(new Array); // true
util.isArray({"0":"string","1":"string","length":"2"}); // false
Avec cette méthode, vous n’aurez plus à vous soucier des normes JS mises en œuvre par V8 car elles indiqueront toujours la bonne réponse.
Que diriez-vous:
your_object instanceof Array
En V8 en Chrome je reçois
[] instanceof Array
> true
({}) instanceof Array
> false
({"0":"string","1":"string","length":"2"}) instanceof Array
> false
Essayez de cette façon:
console.log (Object.prototype.toString.call (arg) .replace (/ ^ [objet (. +)] $ /, '$ 1'). toLowerCase ())