Pourquoi parseInt renvoie-t-il NaN avec Array#map ?
Le réseau de développeurs Mozilla déclare que [1,4,9].map( Math.sqrt) renvoie [1,2,3]. Cependant, l'application de parseInt au littéral du tableau ['1','2','3'] avec la carte donne [1, NaN, NaN]. Ce comportement se produit dans Firefox 3.0.1 et Chrome 0.3.
La cause profonde
La divergence provient du fait que la fonction de rappel dans map a trois paramètres : la valeur de l'élément, son index et l'objet tableau parcouru. Lorsque parseInt est appelé dans la carte, l'index devient le deuxième argument, qu'il interprète comme la base (la base du système numérique en cours de conversion).
Dans le cas susmentionné, parseInt est appelé avec des valeurs de base de 0. , 1 et 2, respectivement. La base est 10 par défaut pour les entiers sans zéro non significatif. Cependant, la base 1 n'est pas valide et la base 2 ne prend pas en charge le nombre 3. Par conséquent, parseInt renvoie NaN pour les deuxième et troisième éléments.
La solution
Pour Pour remédier à cela, une fonction wrapper peut être utilisée :
['1','2','3'].map(function(num) { return parseInt(num, 10); });
Alternativement, dans ES2015 :
['1','2','3'].map(num => parseInt(num, 10));
En fournissant explicitement la base 10, nous garantissons que parseInt interprète correctement les chaînes comme des entiers en base 10.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!