La vérification du Type des objets dans le JS est fait via instanceof
, c'est à dire
obj instanceof Array
Cela ne fonctionnera pas si l'objet est passé au-delà des limites du cadre, car chaque image a sa propre Array
objet. Vous pouvez contourner ce problème en la vérification de la [[Catégorie]] propriété de l'objet. Pour l'obtenir, utiliser Object.prototype.toString()
(ce qui est garanti par l'ECMA-262):
Object.prototype.toString.call(obj) === '[object Array]'
Les deux méthodes ne fonctionne que pour les réels tableaux et pas de tableau-comme des objets, comme la arguments
objet de nœud ou de listes. Comme tous les tableau comme des objets doit être numérique length
de la propriété, je voudrais vérifier pour ces comme ceci:
typeof obj !== 'undefined' && obj !== null && typeof obj.length === 'number'
Veuillez noter que les chaînes vont passer cette case, ce qui pourrait conduire à des problèmes que IE ne permettent pas l'accès à une chaîne de caractères en indice. Par conséquent, vous souhaiterez peut-être modifier typeof obj !== 'undefined'
de typeof obj === 'object'
d'exclure les primitives et les objets hôte avec des types distincts 'object'
ensemble. Cela va laisser des objets string pass, qui devraient être exclus manuellement.
Dans la plupart des cas, ce que vous voulez savoir si vous pouvez effectuer une itération sur l'objet par des indices numériques. Par conséquent, il pourrait être une bonne idée de vérifier si l'objet possède une propriété nommée 0
au lieu de cela, ce qui peut être fait par l'un de ces contrôles:
typeof obj[0] !== 'undefined' // false negative for `obj[0] = undefined`
obj.hasOwnProperty('0') // exclude array-likes with inherited entries
'0' in Object(obj) // include array-likes with inherited entries
Le casting de l'objet est nécessaire de travailler correctement pour tableau-comme les primitives (c'est à dire des chaînes de caractères).
Voici le code pour des contrôles stricts pour JS tableaux:
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
et itératif (c'est à dire non-vide) tableau des objets similaires à:
function isNonEmptyArrayLike(obj) {
try { // don't bother with `typeof` - just access `length` and `catch`
return obj.length > 0 && '0' in Object(obj);
}
catch(e) {
return false;
}
}