どちらが良いですか?
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'
と入力したかのようにエラーを表示するのではなく、エラーを表示することを好みます。本当に例外を作るのは、スタイルを数値に変換するときだけです。その場合、スタイルは'3px'
のような形式になるため、parseFloat
が役立ちます。 'px'
部分を取得し、3
を取得するだけなので、ここでparseFloat
が役立ちます。しかし、実際にどちらを選択するかはあなた次第であり、どの形式の入力を受け入れるかはあなた次第です。
単項+
演算子を使用することは、関数としてNumber
を使用することとまったく同じであることに注意してください。
Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40
だから私は通常+
を単に使用します。あなたがそれが何をするかを知っている限り、私はそれが読みやすいと思います。
違いは、入力が「適切な数」でない場合に起こることです。 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
これらの例では、違いがわかります。
Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;
parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;
parseFloatは、文字列内の数値の最初の出現を検索するため、少し遅くなりますが、Numberコンストラクターは、空白を含む数値またはfalse値を含む文字列から新しい数値インスタンスを作成します。
追伸普遍的な型変換ソリューションに興味がある場合は、私のブログで型変換に関する投稿を読むことができます。 http://justsimplejs.blogspot.com/2012/08/data-type-conversion.html
空の文字列の場合、それらは異なります。
+""
およびNumber("")
は0を返し、parseFloat("")
はNaNを返します。
私の知る限り、これは同僚から耳にしたことがないため、parseFloatの方がわずかに速いことを完全に知らないかもしれません。
さらなる調査を行っていますが、このパフォーマンスの違いはブラウザに依存しているようです。
http://jsperf.com/parseint-vs-parsefloat/6
これらのjsPerfの結果を見て、電話してください。 (+ xテストも含まれます)
@xdazzの答えで述べたように、+""
とNumber("")
は0
を返しますが、parseFloat("")
はNaN
を返します。空の文字列は数値0を意味するのではなく、文字"0"
を含む文字列のみが0を意味します。