Bonjour,
j'ai un bug surprennant qui se produit aussi bien sous Firefox que Chrome :
dans un module ES6, je remplis un tableau associatif avec des données issues d'une requête HTTP vers une API REST (donc je ne code pas en dur ni les clés ni les valeurs de ce tableau, ce sont les données retournées par l'API).
J'ai un bout de code de la forme :
Tout se passe bien, jusqu'à ce que la boucle for tombe sur un cas particulier ou - manque de pot - donneesSources[i].toto vaut la chaîne "length" (ce qui est permis du point de vue de mon API REST).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 let monTableau = new Array(); for(let i = 0; i < donneesSources.length; i++) { let cle = donneesSources[i].toto; let valeur = donneesSources[i].titi; monTableau[cle] = valeur; }
=> Et là, c'est le drame !
On dirait que l'interprêteur considère que j'essaie de faire :Uncaught RangeError: Invalid array length
avec valeur qui n'est pas un entier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part monTableau.length = valeur;
=> Alors qu'en réalité, j'essaie de faire :
ce qui n'est pas du tout la même chose de mon point de vue, mais on dirait que JS ne fait pas la différence.
Code : Sélectionner tout - Visualiser dans une fenêtre à part monTableau["length"] = valeur;
Comble du bonheur, si j'essaie de faire une recherche Google avec les mots-clés "Javascript", "Array", "length" ou "RangeError" je n'obtiens que des résultats sans aucun rapport avec mon problème.
=> Avez-vous déjà rencontré ce bug ?
=> Est-ce normal que JS ne fasse pas la différence entre monTableau.length et monTableau["length"] ?
=> Avez-vous des astuces pour contourner "proprement" ce problème sachant que je ne choisis pas le contenu de cle ni valeur ?
Merci d'avance pour votre aide![]()
Partager