Heim >Web-Frontend >js-Tutorial >Warum gibt „['1', '2', '3'].map(parseInt)' in JavaScript „[1, NaN, NaN]' zurück?

Warum gibt „['1', '2', '3'].map(parseInt)' in JavaScript „[1, NaN, NaN]' zurück?

Barbara Streisand
Barbara StreisandOriginal
2024-12-27 21:00:19189Durchsuche

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

Verarbeitung von Radix in Array#map parseInt-Aufrufen

Im Kontext von JavaScript-Arrays transformiert die Map-Methode jedes Element mithilfe einer bereitgestellten Rückruffunktion . Während Map Math.sqrt erfolgreich auf Zahlen anwenden kann, kann sein Verhalten mit parseInt auf Strings verwirrend sein.

Man könnte erwarten, dass ['1', '2', '3'].map(parseInt) zurückgegeben wird [1, 2, 3]. Tatsächlich ergibt es jedoch [1, NaN, NaN]. Diese Kuriosität ergibt sich aus dem Radix-Parameter von parseInt.

Die Rolle von Radix in parseInt

parseInt erwartet zwei Argumente: den umzuwandelnden Wert und die Basis. Wenn die Basis weggelassen wird, wird die „beste Schätzung“ basierend auf der Eingabe verwendet.

Im Fall von ['1', '2', '3'].map(parseInt) wird die Basis der Index jedes Elements während der Array-Iteration. Daher wird am Ende Folgendes aufgerufen:

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

Das Problem lösen

Um dieses Problem zu lösen und das gewünschte Ergebnis zu erhalten [1, 2, 3], können Sie Folgendes tun Verwenden Sie eine Wrapper-Funktion wie diese:

['1', '2', '3'].map(function(num) { return parseInt(num, 10); });

oder mit ES2015 Syntax:

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

Hier wird die Basis explizit auf 10 gesetzt, um eine korrekte Analyse sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum gibt „['1', '2', '3'].map(parseInt)' in JavaScript „[1, NaN, NaN]' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn