J'écris une simple boucle for ... in en javascript, et je me demande pourquoi la clé est une chaîne et non un nombre?
Pourquoi il en est ainsi, et puis-je changer cela en nombre?
var array = ["a", "b", "c"];
for (var key in array) {
console.log(typeof key); //string
console.log(key + 1); //expected output : 01, 11, 21...
}
3 Réponses :
Veuillez noter que toutes les clés de la notation entre crochets sont converties en type String, car les objets en JavaScript ne peuvent avoir que le type String comme type de clé .
Cela n'a pas été vrai depuis des années. ES2015 a introduit les propriétés nommées par symbole, et ES2019 ou ES2020 introduira également les noms privés. J'ai corrigé la citation ci-dessus dans l'article lié.
Les noms de propriété d'objet sont toujours des chaînes.
Utilisez + , parseInt , JSON.parse ou toute autre méthode standard pour convertir une chaîne en nombre si vous voulez un nombre.
var array = ["a", "b", "c"];
for (var key in array) {
console.log(+key + 1);
}
"Les noms des propriétés des objets sont toujours des chaînes." Cela n'a pas été vrai depuis des années ... :-)
C'est une chaîne car les tableaux standard en JavaScript ne sont pas vraiment des tableaux à tous ¹, ce sont des objets avec des propriétés pour les entrées du tableau, et les noms de propriétés d'objet (clés) sont des chaînes, des symboles ou des noms privés (bientôt).
Vous ne pouvez pas en faire un nombre par défaut dans un for-in , mais vous pouvez le convertir en un nombre, ou utiliser d'autres formes comme un appel for standard ou un forEach :
for (var key = 0; key < array.length; ++k) {
// ...
}
// ..or
array.forEach((entry, key) => {
// ...
});
Utiliser for-in pour parcourir un tableau est presque toujours un anti-pattern. Consultez ma réponse ici pour un aperçu détaillé de votre diverses options pour parcourir les tableaux.
¹ C'est un article sur mon petit blog anémique.
Merci pour la réponse rapide et la petite explication sur votre blog :).
C'est probablement parce que for y in x traite le x comme un objet afin que vous puissiez parcourir ses propriétés
L'utilisation d'un foreach avec des tableaux coûte un peu cher si vous voulez accéder aux éléments du tableau, car vous devez analyser
keysur un int, il est préférable d'utiliser des boucles foreach pour les objets ({}) et non des tableaux ([]). Les boucles standard pour les tableaux sont soitfor (let i = ..; i <....; i ++) {}ouarray.forEach (function (val, i) {}).