Duplication possible:
JavaScript: Vérifiez si l'objet est un tableau?
Pourquoi un ensemble d'objets est-il considéré comme un objet, et non un tableau? Par exemple:
$.ajax({ url: 'http://api.twitter.com/1/statuses/user_timeline.json', data: { screen_name: 'mick__romney'}, dataType: 'jsonp', success: function(data) { console.dir(data); //Array[20] alert(typeof data); //Object } });
Violon
L'un des comportements et spécifications étranges dans Javascript est le typeof Array is Object
.
Vous pouvez vérifier si la variable est un tableau de plusieurs façons:
var isArr = data instanceof Array; var isArr = Array.isArray(data);
Mais le moyen le plus fiable est:
isArr = Object.prototype.toString.call(data) == '[object Array]';
Puisque vous avez marqué votre question avec jQuery, vous pouvez utiliser jQuery isArray
function:
var isArr = $.isArray(data);
Citer la spécification
Les objets Array apportent un traitement spécial à une certaine classe de noms de propriété. Un nom de propriété P (sous la forme d'une valeur String) est un index de tableau si et seulement si ToString (ToUint32 (P)) est égal à P et ToUint32 (P) n'est pas égal à 2 ^ 32-1. Une propriété dont le nom de propriété est un index de tableau est également appelé un élément. Chaque objet Array a une propriété de longueur dont la valeur est toujours un entier non négatif inférieur à 2 ^ 32. La valeur de la propriété length est numériquement supérieure au nom de chaque propriété dont le nom est un index de tableau; Chaque fois qu'une propriété d'un objet Array est créée ou modifiée, d'autres propriétés sont ajustées au besoin pour maintenir cet invariant. Plus précisément, chaque fois qu'une propriété est ajoutée dont le nom est un index de tableau, la propriété de longueur est modifiée, si nécessaire, pour être supérieure à la valeur numérique de cet indice de tableau; Et chaque fois que la propriété de longueur est modifiée, chaque propriété dont le nom est un index de tableau dont la valeur n'est pas inférieure à la nouvelle longueur est automatiquement supprimée. Cette contrainte s'applique uniquement aux propriétés propres à un objet Array et n'est pas affectée par la longueur ou les propriétés d'index de tableau qui peuvent être héritées de leurs prototypes.
Et voici une table pour typeof
Pour ajouter du fond, il existe deux types de données en JavaScript:
Un objet en JavaScript est similaire en structure au tableau associatif / dictionnaire vu dans la plupart des langages orientés objet, c'est-à-dire qu'il a un ensemble de paires clé-valeur.
Un tableau peut être considéré comme un objet avec les propriétés / clés suivantes:
J'espère que cela a permis d'éclairer davantage pourquoi typeof Array renvoie un objet. À votre santé!
Essayez cet exemple et vous comprendrez également quelle est la différence b / w Associative Array and Object en JavaScript.
Tableau associatif
var a = new Array(1,2,3); a['key'] = 'experiment'; Array.isArray(a);
Renvoie true
Gardez à l'esprit que a.lenth sera indéfini, car la longueur est traitée comme une clé, vous devez utiliser Object.keys(a).length
pour obtenir la longueur d'une matrice associative.
Objet
var a = {1:1, 2:2, 3:3,'key':'experiment'}; Array.isArray(a)
Renvoie false
JSON retourne et Object … pourrait renvoyer un tableau associatif … mais ce n'est pas comme ça
Il n'y a pas de tableau JS simple dans votre code. Les data
sont un objet JS natif. Soyez conscient des différentes significations des différents types de parenthèses:
var someArray = []; var someObject = {};