どちらが良いですか?
number(x)の代わりに+ xを使用できるため、数バイトを削るためにこれを求めています。parsefloatは何か良いことをしますか?
どちらが良いですか?
number(x)の代わりに+ 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
より合理的であると思うので、ほとんど常にNumber
個人的に使用します(そして、多くの内部JavaScript関数も使用し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()
より予想通り、私も空の値である空白、それを検討するなど、「奇妙な」それがnull /未定義=> 0ではありませんが素敵な結果です。とにかくショーケースのためのあなたのための
Number('Infinity') === Infinity
それについて言及したいかもしれませんparseInt('Infinity') === NaN
+
(単項プラス)は使用しません。前の行のセミコロンを忘れた場合、代わりに加算式が評価される可能性があるためです。
違いは、入力が「適切な数」でない場合に何が起こるかです。「可能な限り」解析Number
するNaN
間に戻りますparseFloat
。空の文字列に呼び出された場合はNumber
戻り0
parseFloatはを返しながらNaN
。
例えば:
Number("") === 0 // also holds for false
isNaN(parseFloat("")) === true // and null
isNaN(Number("32f")) === true
parseFloat("32f") === 32
NaN != NaN
しかし
NaN != NaN
評価はTRUEです -チップをありがとう!
isNaN(NaN)
戻りますtrue
これらの例では、違いを確認できます。
Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;
parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;
parseFloatは文字列内の数値の最初の出現を検索するので少し遅くなりますが、Numberコンスタクタは、空白を含む数値またはfalse値を含む文字列から新しい数値インスタンスを作成します。
PS普遍的な型変換ソリューションに興味がある場合は、私のブログの型変換に関する投稿を読むことができます。http://justsimplejs.blogspot.com/2012/08/data-type-conversion.html
空の文字列の場合は異なります。
+""
そしてNumber("")
0をparseFloat("")
返し、NaN を返します。
parseFloat()
、空の文字列が数字ではないと正しい結果があります0
(読み:NaN)の文字と文字列の間、"0"
その中には、IS 0
。
+x
0
空の文字列だけでなく、空白のみの文字列も返します。例:+" "
、+"\t\t\t"
、+"\n\n"
-それらのすべてを与える0
結果
私の知る限り、これは同僚から聞いたことがあるだけなので、まったく知られていないかもしれませんが、parseFloatはわずかに高速です。
さらに調査すると、このパフォーマンスの違いはブラウザによって異なるようです。
http://jsperf.com/parseint-vs-parsefloat/6
これらのjsPerfの結果を確認して、電話をかけてください。(+ xテストも含まれます)
@xdazzさんの回答で述べたように、通り+""
とNumber("")
返し0
ながらparseFloat("")
戻りNaN
再び私が空の文字列の番号0を意味するものではありませんので、文字と文字列のみ、parseFloatはとなるだろうので、"0"
その中には、0を意味します。
parseFloat()
まだ勝者です。