Warum gibt parseInt NaN mit Array#map zurück?
Das Mozilla Developer Network gibt an, dass [1,4,9].map( Math.sqrt) gibt [1,2,3] zurück. Die Anwendung von parseInt auf das Array-Literal ['1','2','3'] mit Map ergibt jedoch [1, NaN, NaN]. Dieses Verhalten tritt in Firefox 3.0.1 und Chrome 0.3 auf.
Die Grundursache
Die Diskrepanz ergibt sich aus der Callback-Funktion in Map mit drei Parametern: dem Wert des Elements, sein Index und das durchlaufene Array-Objekt. Wenn parseInt innerhalb von Map aufgerufen wird, wird der Index zum zweiten Argument, das als Basis (die Basis des zu konvertierenden Zahlensystems) interpretiert wird.
Im oben genannten Fall wird parseInt mit Basiswerten von 0 aufgerufen , 1 bzw. 2. Für Ganzzahlen ohne führende Null ist die Basis standardmäßig 10. Allerdings ist Basis 1 ungültig und Basis 2 unterstützt die Zahl 3 nicht. Daher gibt parseInt NaN für das zweite und dritte Element zurück.
Die Lösung
Zu Um dies zu beheben, kann eine Wrapper-Funktion verwendet werden:
['1','2','3'].map(function(num) { return parseInt(num, 10); });
Alternativ in ES2015 :
['1','2','3'].map(num => parseInt(num, 10));
Indem wir die Basis explizit als 10 angeben, stellen wir sicher, dass parseInt die Zeichenfolgen korrekt als Ganzzahlen zur Basis 10 interpretiert.
Das obige ist der detaillierte Inhalt vonWarum gibt „parseInt' „NaN' zurück, wenn es mit „Array#map' verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!