ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で `['1', '2', '3'].map(parseInt)` が `[1, NaN, NaN]` を返すのはなぜですか?

JavaScript で `['1', '2', '3'].map(parseInt)` が `[1, NaN, NaN]` を返すのはなぜですか?

Barbara Streisand
リリース: 2024-12-27 21:00:19
オリジナル
185 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート