J'ai remarqué que certains codes qui évaluent certaines tailles de chaussures pour un site de commerce électronique et les affichent à l'écran gâchent la commande dans Chrome.Clés de réapprovisionnement des objets en chrome si les chiffres sont normaux/attendus
JSON donné peut être:
{
"7": ["9149", "9139", "10455", "17208"],
"7.5": ["9140", "9150", "10456", "17209"],
"8": ["2684", "9141", "10457", "17210"],
"8.5": ["9142", "10444", "10458", "17211"],
"9": ["2685", "9143", "10459", "17212"],
"9.5": ["10443", "9144", "10460", "17213"]
}
... qui incrémente la taille en deux.
Lors de la conversion en un objet et itérer si les clés, l'ordre naturel est respecté et ils viennent comme:
7, 7.5, 8, 8.5, etc.
Mais Chrome seulement, les clés que 'look' comme les numéros ronds TOUJOURS sORTENT de l'objet premier, donc la sortie d'une boucle for ... in est:
7, 8, 9, 7. 5, 8,5, 9,5 ...
Object.keys(sizes); // ["7", "8", "9", "7.5", "8.5", "9.5"]
est ici le cas de test: https://jsfiddle.net/wcapc46L/1/
Il est seulement affecte des nombres entiers, semble comme Webkit/Blink ont une optimisation qui préfère propriétés d'objets qui sont numérique, peut-être que cela a à voir avec la prédiction de branche ou autre.
Si vous préfixer les clés d'objet avec un caractère, l'ordre reste inchangé et fonctionne comme prévu - FIFO
Je pense que je me souviens avoir lu qu'il n'y a aucune garantie sur l'ordre des propriétés d'un objet, mais en même Dans le temps, c'est énervant à l'extrême et cela causerait beaucoup d'efforts pour le fixer uniquement pour les utilisateurs de chrome.
Des idées? Est-ce probablement un bug qui sera corrigé?
modifier En outre, j'ai maintenant découvert cela comme un problème sur le bug v8 Tracker:
http://code.google.com/p/v8/issues/detail?id=164
Ressemble Blink ne veulent pas résoudre ce problème et restera le seul navigateur qui fais le.
mise à jour quelle que soit l'optimisation de la table de hachage webkit/blink avait, a fait son chemin dans gecko (FF 27.0.1) - http://jsfiddle.net/9Htmq/ résultats dans
7,8,9,7.5,8.5,9.5
. l'application_
avant que les clés retourne l'ordre correct/prévu.mise à jour 2017 Les gens sont encore upvoting et l'édition de cette façon - Il ne semble pas affecter
Map
/WeakMap
,Set
etc (comme l'a démontré par l'exemple principal mis à jour)
+1 pour un test élémentaire. – spender
Je pense que vous devez réorganiser votre méthode de planification ici. Si vous avez * lu * que la commande n'est pas définie, pourquoi vous plaignez-vous de devoir corriger beaucoup de code lorsque vous découvrez que * surprise surprise *, elle est indéfinie? Ce n'est pas un bogue qui sera corrigé, d'autres pour dire que le bogue est dans votre code, vous vous êtes fié aux détails de l'implémentation, pas au comportement documenté. Fixe ton code. –
au moment du développement, le chrome était loin d'être atteint et représente maintenant 7% des utilisateurs du site. jusqu'à ce que le chrome arrive, il a fonctionné comme prévu dans tous les navigateurs, safari inclus - donc ce n'est pas un problème de webkit.et oui, je comprends qu'il peut avoir besoin de refactorisation mais espérait une solution plus facile (ou que le chrome sera en train de régler cela comme tout le monde). pour l'instant, je peux devoir préfixer toutes les propriétés d'objet avec __ ou quelque chose pour forcer l'ordre naturel de définition. –