Une chose à noter est qu'il existe une différence entre les tableaux et les tableaux associatifs. En rangées régulières (réel des tableaux), l'index doit être un nombre entier. En revanche, les tableaux associatifs peuvent utiliser les chaînes de caractères comme un indice. Vous pouvez penser à des tableaux associatifs comme une carte, si vous le souhaitez. Maintenant, notez également, véritables tableaux de toujours recommencer à partir de zéro. Ainsi, dans votre exemple, vous avez créé un tableau de la manière suivante:
a = [];
a["1"] = {"string1":"string","string2":"string"};
a["2"] = {"string1":"string","string2":"string"}
Javascript a été en mesure de convertir votre index de chaînes de caractères en nombres, par conséquent, votre code ci-dessus devient:
a = [];
a[1] = {"blah"};
a[2] = {"blah"};
Mais rappelez-vous ce que j'ai dit précédemment: de Vrais tableaux de commencer à partir de zéro. Par conséquent, l'interpréteur javascript automatiquement attribué un[0] à l'indéfini. Essayer dans firebug ou chrome/safari console, et vous verrez quelque chose comme ceci lorsque vous essayez d'imprimer "un". Vous devriez obtenir quelque chose comme "[non défini, l'Objet, l'Objet]. Donc la taille 3 et non pas 2 comme prévu.
Dans ton deuxième exemple, je suis sûr que vous êtes en essayant de simuler l'utilisation d'un tableau associatif, dont l'essentiel est l'ajout de propriétés à un objet. Rappelez-vous associé les tableaux vous permettent d'utiliser les chaînes de caractères comme une clé. Donc, en d'autres termes, vous ajoutez une propriété de l'objet. Donc dans votre exemple:
b["key1"] = {"string1":"string","string2":"string"};
cela signifie réellement:
b.key1 = {"string1":"string","string2":"string"};
L'initialisation b =[] crée simplement un tableau, mais votre mission ne pas remplir le tableau. Il donne simplement des "b" des propriétés supplémentaires. Espérons que cela aide.. :-)