Quelle est la bonne façon de dire si un objet est un tableau?La façon de dire si un objet est un tableau JavaScript
La fonction isArray (o) { ??? }
Quelle est la bonne façon de dire si un objet est un tableau?La façon de dire si un objet est un tableau JavaScript
La fonction isArray (o) { ??? }
La meilleure façon:
function isArray(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
}
Le ECMAScript 5th Edition Specification définit une méthode pour cela, et some browsers, comme Firefox 3.7alpha, Chrome 5 version bêta et les dernières versions de WebKit Nightly fournissent déjà une implémentation native. Vous pouvez donc l'implémenter si elle n'est pas disponible:
if (typeof Array.isArray != 'function') {
Array.isArray = function (obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
};
}
encore plus sûr est 'retourner Object.prototype.toString.call (obj) === '[tableau d'objets]';' pour éviter toute coersion possible – Rixius
@Rixius: Eh bien, la méthode 'Object.prototype.toString' est [entièrement décrit] (http://bclary.com/2004/11/07/#a-15.2.4.2) dans la spécification, une valeur de retour 'String' est * garanti *, je ne vois aucun avantage à utiliser le strict est égal à l'opérateur, quand vous savez que vous comparez deux valeurs de chaînes ... – CMS
Quelqu'un aurait pu mettre en garde 'Object.prototype.toString' pour mieux prévenir que guérir. – Rixius
C'est ce que j'utilise:
function is_array(obj) {
return (obj.constructor.toString().indexOf("Array") != -1)
}
Merci pour la réponse, je ne comprends pas pourquoi x.constructor.toString(). IndexOf ("Array") renvoie 9 si son instance de tableau? peux-tu me dire s'il te plait? – Sudarshan
function typeOf(obj) {
if (typeof(obj) == 'object')
if (obj.length)
return 'array';
else
return 'object';
} else
return typeof(obj);
}
Vous pouvez prendre la définition bibliothèque de méthode Object.isArray() Prototype dont le test:
function(object) {
return object != null && typeof object == "object" &&
'splice' in object && 'join' in object;
}
Prototype n'utilise plus cette méthode, voir [ici] (http://github.com/sstephenson/prototype/blob/1.6.1/src/lang/object.js#L191) comment il est implémenté en 1.6.1. – CMS
Vous devriez pouvoir utiliser l'opérateur instanceof
:
var testArray = [];
if (testArray instanceof Array)
...
Le seul inconvénient de 'instanceof' est lorsque vous travaillez dans un environnement DOM multi-frame, un objet de tableau forme un cadre n'est pas une instance du constructeur' Array' de l'autre image. Voir [cet article] (http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/) pour plus de détails. – CMS
permet de résoudre jQuery beaucoup de ces sortes de questions:
jQuery.isArray(obj)
Vous pouvez fournir plus de détails sur votre environnement, par exemple: javascript pur? Courir dans un navigateur? Des prototypes ou d'autres bibliothèques sont-ils disponibles? –