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
Barbara Streisandoriginal
2024-12-27 21:00:19251parcourir

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

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); });

ou avec ES2015 syntaxe :

['1', '2', '3'].map(num => parseInt(num, 10));

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!

Déclaration:
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