数バイトを削るためだけにこれを求めています。
+x
の代わりに (単項プラス)を使用できることはわかっていますNumber(x)
。それらとの間に違いはありparseFloat
ますか?
数バイトを削るためだけにこれを求めています。
+x
の代わりに (単項プラス)を使用できることはわかっていますNumber(x)
。それらとの間に違いはありparseFloat
ますか?
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
は、文字列から数字を切り捨てますが、 (数字でNumber
はNaN
ありません):
parseFloat('1x'); // => 1
Number('1x'); // => NaN
さらに、Number
16 進入力を理解しますが、次のこと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'
ため3
、parseFloat
役に立ちます。ここ。しかし、実際にどちらを選択するかはあなた次第であり、どの形式の入力を受け入れたいかはあなた次第です。
単項演算子を使用することは、関数+
として使用することとまったく同じであることに注意してください。Number
Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40
だから私は通常、単に+
略して使用します。あなたがそれが何をするかを知っている限り、私はそれを読むのは簡単だと思います.
違いは、入力が「適切な数値」でない場合に何が起こるかです。「可能な限り」解析しながらNumber
戻ります。空の文字列に対して呼び出された場合は、 parseFloat が返される間に返されます。NaN
parseFloat
Number
0
NaN
例えば:
Number("") === 0 // also holds for false
isNaN(parseFloat("")) === true // and null
isNaN(Number("32f")) === true
parseFloat("32f") === 32
これらの例では、違いを見ることができます:
Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;
parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;
parseFloat は、文字列内の数値の最初の出現を検索するため、少し遅くなりますが、 Number コンストラクターは、空白を含む数値または偽の値を含む文字列から新しい数値インスタンスを作成します。
空の文字列の場合、それらは異なります。
+""
andNumber("")
は 0 を返し、whileparseFloat("")
は NaN を返します。
私の知る限り、これは同僚から耳にしただけなので、まったく知らされていない可能性があります.parseFloatはわずかに高速です.
さらに調査すると、このパフォーマンスの違いはブラウザに依存しているようです。
http://jsperf.com/parseint-vs-parsefloat/6
これらの jsPerf の結果を見て、電話してください。(+x テストも含まれます)
@xdazz の回答に記載されているように+""
、Number("")
return 0
while parseFloat("")
returns NaN
so 繰り返しますが、parseFloat を使用し"0"
ます。