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