Maison > interface Web > js tutoriel > Pourquoi `['1', '2', '3'].map(parseInt)` renvoie-t-il `[1, NaN, NaN]` en JavaScript ?

Pourquoi `['1', '2', '3'].map(parseInt)` renvoie-t-il `[1, NaN, NaN]` en JavaScript ?

Barbara Streisand
Libérer: 2024-12-27 21:00:19
original
185 Les gens l'ont consulté

Why Does `['1', '2', '3'].map(parseInt)` Return `[1, NaN, NaN]` in JavaScript?

Gestion des bases dans les appels Array#map parseInt

Dans le contexte des tableaux JavaScript, la méthode map transforme chaque élément à l'aide d'une fonction de rappel fournie . Bien que map puisse appliquer avec succès Math.sqrt sur des nombres, son comportement avec parseInt sur des chaînes peut prêter à confusion.

On pourrait s'attendre à ce que ['1', '2', '3'].map(parseInt) renvoie [1, 2, 3]. Cependant, cela donne en réalité [1, NaN, NaN]. Cette bizarrerie provient du paramètre radix de parseInt.

Le rôle de Radix dans parseInt

parseInt attend deux arguments : la valeur à convertir et la base. Si la base est omise, il utilise la « meilleure estimation » basée sur l'entrée.

Dans le cas de ['1', '2', '3'].map(parseInt), la base devient l'index de chaque élément lors de l'itération du tableau. Ainsi, il finit par appeler :

parseInt('1', 0); // Correct (radix defaults to 10)
parseInt('2', 1); // Invalid radix (not a number base)
parseInt('3', 2); // Invalid number in base 2
Copier après la connexion

Résoudre le problème

Pour résoudre ce problème et obtenir le résultat souhaité [1, 2, 3], vous pouvez utilisez une fonction wrapper comme celle-ci :

['1', '2', '3'].map(function(num) { return parseInt(num, 10); });
Copier après la connexion

ou avec ES2015 syntaxe :

['1', '2', '3'].map(num => parseInt(num, 10));
Copier après la connexion

Ici, la base est explicitement définie sur 10, garantissant une analyse correcte.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal