192

数バイトを削るためだけにこれを求めています。

+xの代わりに (単項プラス)を使用できることはわかっていますNumber(x)。それらとの間に違いはありparseFloatますか?

4

5 に答える 5

400

parseFloat と Number の違い

parseFloat/parseIntは文字列を解析するためのもので、Number/+は値を数値に強制するためのものです。それらは異なる動作をします。しかし、最初に、それらが同じように動作する場所を見てみましょう。

parseFloat('3'); // => 3
Number('3'); // => 3
parseFloat('1.501'); // => 1.501
Number('1.501'); // => 1.501
parseFloat('1e10'); // => 10000000000
Number('1e10'); // => 10000000000

したがって、標準の数値入力がある限り、違いはありません。ただし、入力が数字で始まり、その後に他の文字が含まれている場合parseFloatは、文字列から数字を切り捨てますが、 (数字でNumberNaNありません):

parseFloat('1x'); // => 1
Number('1x'); // => NaN

さらに、Number16 進入力を理解しますが、次のことparseFloatはできません。

parseFloat('0x10'); // => 0
Number('0x10'); // => 16

しかしNumber、空の文字列または空白のみを含む文字列では奇妙な動作をします:

parseFloat(''); // => NaN
Number(''); // => 0
parseFloat(' \r\n\t'); // => NaN
Number(' \r\n\t'); // => 0

全体として、私はNumberより合理的であることがわかったので、私はほとんどの場合個人的に を使用します (そして、多くの内部 JavaScript 関数も同様にNumber使用することがわかります)。Number誰か'1x''1'. 私が実際に例外を作るのは、スタイルを数値に変換するときだけです。その場合parseFloat、スタイルは のような形式'3px'で提供される'px'ため3parseFloat役に立ちます。ここ。しかし、実際にどちらを選択するかはあなた次第であり、どの形式の入力を受け入れたいかはあなた次第です。

単項演算子を使用することは、関数+として使用することとまったく同じであることに注意してください。Number

Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40

だから私は通常、単に+略して使用します。あなたがそれが何をするかを知っている限り、私はそれを読むのは簡単だと思います.

于 2012-12-03T02:13:23.710 に答える
16

違いは、入力が「適切な数値」でない場合に何が起こるかです。「可能な限り」解析しながらNumber戻ります。空の文字列に対して呼び出された場合は、 parseFloat が返される間に返されます。NaNparseFloatNumber0NaN

例えば:

Number("") === 0               // also holds for false
isNaN(parseFloat("")) === true // and null

isNaN(Number("32f")) === true
parseFloat("32f") === 32
于 2012-09-01T12:20:28.330 に答える
8

これらの例では、違いを見ることができます:

Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;

parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;

parseFloat は、文字列内の数値の最初の出現を検索するため、少し遅くなりますが、 Number コンストラクターは、空白を含む数値または偽の値を含む文字列から新しい数値インスタンスを作成します。

于 2012-09-01T12:21:16.293 に答える
2

空の文字列の場合、それらは異なります。

+""andNumber("")は 0 を返し、whileparseFloat("")は NaN を返します。

于 2012-09-01T12:16:14.930 に答える
2

私の知る限り、これは同僚から耳にしただけなので、まったく知らされていない可能性があります.parseFloatはわずかに高速です.

さらに調査すると、このパフォーマンスの違いはブラウザに依存しているようです。

http://jsperf.com/parseint-vs-parsefloat/6

これらの jsPerf の結果を見て、電話してください。(+x テストも含まれます)

@xdazz の回答に記載されているように+""Number("")return 0while parseFloat("")returns NaNso 繰り返しますが、parseFloat を使用し"0"ます。

于 2012-09-01T12:17:20.450 に答える