Array#map parseInt 呼び出しでの基数の処理
JavaScript 配列のコンテキストでは、map メソッドは提供されたコールバック関数を使用して各要素を変換します。 Map は数値に Math.sqrt を適用できますが、文字列に対する parseInt の動作は混乱を招く可能性があります。
['1', '2', '3'].map(parseInt) が返されることを期待するかもしれません。 [1、2、3]。ただし、実際には [1, NaN, NaN] が生成されます。この奇妙な点は、parseInt の radix パラメータに由来します。
parseInt における Radix の役割
parseInt は、変換される値と基数という 2 つの引数を必要とします。基数を省略した場合、入力に基づいて「最良の推測」が使用されます。
['1', '2', '3'].map(parseInt) の場合、基数は次のようになります。配列の反復中の各要素のインデックス。したがって、最終的に次の呼び出しが行われます。
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
問題の解決
この問題を解決して望ましい結果 [1、2、3] を得るには、次のようにします。次のようなラッパー関数を使用します:
['1', '2', '3'].map(function(num) { return parseInt(num, 10); });
または ES2015 で構文:
['1', '2', '3'].map(num => parseInt(num, 10));
ここでは、正しい解析を保証するために基数が明示的に 10 に設定されています。
以上がJavaScript で `['1', '2', '3'].map(parseInt)` が `[1, NaN, NaN]` を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。