Les deux extraits de code différents suivants me semblent équivalents:
var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";
et
var myObject = {'A': 'Athens', 'B':'Berlin'};
parce qu'ils se comportent tous les deux de la même manière, ainsi que typeof(myArray) == typeof(myObjects)
(les deux donnent 'objet').
Y a-t-il une différence entre ces variantes?
Pratiquement tout en javascript est un objet, vous pouvez donc "abuser" d'un objet Array en y définissant des propriétés arbitraires. Ceci devrait être considéré nocif quoique. Les tableaux sont destinés aux données indexées numériquement. Pour les clés non numériques, utilisez un objet.
Voici un exemple plus concret pour lequel les clés non numériques ne "correspondent" pas à un tableau:
var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";
alert(myArray.length);
Cela n'affichera pas '2', mais '0' - effectivement, aucun élément n'a été ajouté au tableau, juste quelques nouvelles propriétés ajoutées à l'objet tableau.
Dans JS, les tableaux sont des objets, juste légèrement modifiés (avec quelques fonctions supplémentaires).
Fonctions comme:
concat
every
filer
forEach
join
indexOf
lastIndexOf
map
pop
Push
reverse
shift
slice
some
sort
splice
toSource
toString
unshift
valueOf
Tout en JavaScript est un objet à part les types primitifs.
Le code
var myArray = Array();
crée une instance de l'objet Array en
var myObject = {'A': 'Athens', 'B':'Berlin'};
crée une instance d'objet Object.
Essayez le code suivant
alert(myArray.constructor)
alert(myObject.constructor)
Donc, vous verrez que la différence réside dans le type de constructeur d'objet.
L'instance de l'objet Array contiendra toutes les propriétés et méthodes du prototype Array.
Une différence pratique réside dans l'utilisation de JSON.stringify
sur une array
tout non numérique index sont ignorés:
var arr = [];
var obj = {};
arr['name'] = 'John';
obj['name'] = 'John';
console.log(arr); // will output [name: "John"]
console.log(obj); // will output {name: "John"}
JSON.stringify(arr); // will return []
JSON.stringify(obj); // will return {"name":"John"}
La différence entre les tableaux et les autres objets en JavaScript. Alors que les tableaux ont une propriété de longueur mise à jour de façon magique, pour les objets autres que les tableaux, il n’ya aucun moyen de mettre en œuvre une telle propriété.
var arrName = [];
arrName[5] = "test";
arrName.length; // <- 6
Les tableaux sont utilisés pour stocker des objets avec un index ordinal - utilisez-les comme un tableau, une pile ou une file d'attente traditionnels. Un objet est un hachage - utilisez-le pour les données ayant une clé distincte.