Les Tableaux Javascript Dans IE 8
Que par ce que je sais, les tableaux en Javascript n'est rien, mais la combinaison de méthodes et d'objets.
Maintenant ma tâche est d'afficher les valeurs du tableau (dire y_array
)
J'ai utilisé for(x in y_array)
puis affiche la valeur.
Dans mozilla et IE sa fonctionne très bien, mais sous IE, il affiche le premier élément du tableau à l'indice de indexOf
de la valeur et de indexOf(obj, from)
qui je ne veux pas.
J'ai essayé
if(x!='indexOf') { display the array value ; }
Cela a fonctionné, et les choses étaient bien, mais il ya une vaste utilisation de tableaux affiche et je suis à la recherche pour certains correctif permanent plutôt que cette codé en dur une.
Quelqu'un peut-il m'aider?
Vous devez vous connecter pour publier un commentaire.
Vous n'êtes pas le premier de mélanger les tableaux et les objets. DONC, doit contenir une FAQ pour ce genre de questions 😉
Nous allons essayer d'expliquer les choses:
Un tableau est une ligne de valeurs, qui peuvent être récupérées à l'aide de leur position dans la ligne. L'ordre du tableau de valeurs est fixe (et peut-être réorganisées).
Un objet est une variable qui contient des propriétés nommées dans le formulaire de paires clé-valeur. L'ordre des paires clé-valeur appartenant à un objet est arbitraire.
Un tableau ressemble:
[ 'first', 'second', 'third', ..., 'nth' ]
Un objet ressemble:
{ first:'firstvalue', second:'secondvalue', ..., nth:'nthvalue' }
Le premier élément d'un tableau est l'élément d'index 0 (donc la première position dans la ligne a la valeur de l'indice 0). Vous récupérer à l'aide de
myArray[0]
Un objet est non ordonnée, de sorte qu'il n'a pas de premier élément. Vous pouvez récupérer n'importe quel élément de l'aide
myObject.somekey
oumyObject['somekey']
.Pour les tableaux vous utilisez une boucle parcourant le numéro d'index jusqu'à la fin du tableau est atteint:
Pour les objets que vous utilisez une boucle à l'aide de la clé et la
in
opérateur (assurez-vous que vous êtes seulement de la récupération défini par l'utilisateur propriétés de l'objet avec le.hasOwnAttribute
méthode):Fondamentalement, penser à un tableau, comme une armoire avec tiroirs, chacun contenant une valeur. Un objet peut être imaginé comme un tas de boîtes avec des autocollants sur le couvercle, décrivant le contenu de la boîte. La récupération de quelque chose à partir d'un objet, demandez-vous: est-il une boîte avec l'autocollant de y en x pile et si oui, qu'en est-il? La récupération de quelque chose à partir d'un tableau, vous demandez: merci de me donner le contenu du tiroir-nr x.
Maintenant à votre question: la pile de l'extraction des valeurs pour un
for..in
boucle contient un définis par l'utilisateur de la méthode, à savoirindexOf
. À l'aide de l'objet style de boucle pour elle, le tableau est traité comme un objet, et leindexOf
clé (avec des valeurs telles quefunction(){...}
je parie) est montré trop. IE c'est pourquoi il peut être préférable d'utiliser un traditionnel pour la boucle avec un index numérique lors de l'itération sur des tableaux.Pourquoi est-ce seulement dans IE? Dans les navigateurs modernes
indexOf
est une méthode native de laArray
prototype, et des méthodes indigènes ne sont pas représentés (sauf si vous en boucle par le biais de leur prototype). IE < 9 ne pas avoir un native méthode indexOf pour les tableaux. Quelque part dans le script que vous utilisez la méthode a été ajouté à la Matrice de prototype comme un utilisateur de poste défini.Ligne de fond pour votre problème: ne pas utiliser
for ... in
à boucle à travers les valeurs d'un tableau.myObject.hasOwnProperty(key)
. Je ne sais pas pourquoi, mais si vous êtes d'avoir des ennuis avec la ci-dessus, il pourrait aiderPour les tableaux, vous devriez utiliser cette boucle for:
Pour les objets (les objets sont comme des tableaux associatifs - propriété: valeur) utiliser cette boucle:
for...in
. Il peut créer des problèmes, comme vous pouvez le voir, et aussi de la boucle sur les fonctions définies sur le tableau. Lire ceci: developer.mozilla.org/en/JavaScript/Reference/Statements/... . Utilisez uniquement un normalfor
boucle pour la matrice d'itération (qui est btw. aussi beaucoup plus rapide).si il n'existe pas de valeur dans votre Objet json comme jsobObj = {}. Ensuite, vous avez le indexOf prototype de la fonction à côté de l'objet vide dans IE < 9. (avec des valeurs telles que la fonction(){...} je parie) est montré trop.
Vous pouvez vérifier une condition à côté de votre Boucle. et ignorer que indexOf.
if(key =='indexOf'){continue;}
E. g :