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!