ホームページ >ウェブフロントエンド >jsチュートリアル >「Array#map」と一緒に使用すると「parseInt」が「NaN」を返すのはなぜですか?

「Array#map」と一緒に使用すると「parseInt」が「NaN」を返すのはなぜですか?

DDD
DDDオリジナル
2024-12-14 15:02:12666ブラウズ

Why Does `parseInt` Return `NaN` When Used with `Array#map`?

なぜ parseInt は Array#map で NaN を返すのですか?

Mozilla Developer Network では、[1,4,9].map( Math.sqrt) は [1,2,3] を返します。ただし、parseInt を配列リテラル ['1','2','3'] にマップとともに適用すると、[1, NaN, NaN] が生成されます。この現象は、Firefox 3.0.1 および Chrome 0.3 で発生します。

根本原因

この不一致は、要素の値、要素の値、そのインデックス、および走査された配列オブジェクト。 parseInt がマップ内で呼び出される場合、インデックスは 2 番目の引数となり、基数 (変換される数値体系の基数) として解釈されます。

前述の場合、parseInt は基数値 0 で呼び出されます。 、1、2とそれぞれなります。先頭にゼロのない整数のデフォルトの基数は 10 です。ただし、基数 1 は無効であり、基数 2 は数値 3 をサポートしていません。したがって、parseInt は 2 番目と 3 番目の要素に対して NaN を返します。

解決策

これを修正するには、ラッパー関数を利用できます。

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

または、 ES2015 :

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

基数を 10 として明示的に指定することで、parseInt が文字列を基数 10 の整数として正しく解釈することが保証されます。

以上が「Array#map」と一緒に使用すると「parseInt」が「NaN」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。