web-dev-qa-db-ja.com

JavaScriptのparseInt(string)とNumber(string)の違いは何ですか?

JavaScriptのparseInt(string)Number(string)の違いは何ですか?

210
DarkLightA
parseInt("123hui")

123を返します

Number("123hui")

NaNを返します

言い換えれば、parseInt()は最初の非数字まで解析し、解析したものをすべて返します。 Number()は、文字列全体を数値に変換したいと考えています。これは、浮動小数点の場合もあります。


編集#1:Luceroは、parseInt()と共に使用できる基数についてコメントしました。それに関する限り、 医師の答え を参照してください(ここではコピーしませんが、ドキュメントには名声のかなりの部分があります...)。


編集#2:ユースケースについて:それはすでに行の間にいくらか書かれています。与えられた文字列が完全に数値、浮動小数点数または整数を表しているかどうかを間接的に確認したい場合は、Number()を使用します。 parseInt()/parseFloat()は厳密に解析されず、数値が停止すると(radix!)停止するため、厳密ではありません。これは、「1つある場合」の前に数値が必要な場合に役立ちます(注意してください) parseInt("hui")NaNを返します。そして、最大の違いは、Number()が知らない基数の使用であり、parseInt()は与えられた文字列から間接的に推測する場合があります(時々奇妙な結果を引き起こす可能性があります)。

303
sjngm

最初のものは2つのパラメーターを取ります。

parseInt(string, radix)

基数パラメーターは、使用する数値システムを指定するために使用されます。たとえば、基数16(16進数)は、ストリング内の数値を16進数から10進数に解析することを示します。

Radixパラメーターが省略された場合、JavaScriptは以下を想定します。

  • 文字列が「0x」で始まる場合、
    基数は16(16進数)です。
  • 文字列が「0」で始まる場合、基数は8(8進数)です。この機能
    は非推奨です
  • 文字列が他の値で始まる場合、基数は10(10進数)です。

あなたが言及した他の関数は、1つのパラメーターのみを取ります。

Number(object)

Number()関数は、オブジェクトの引数をオブジェクトの値を表す数値に変換します。

値を有効な数値に変換できない場合、NaNが返されます。

69
THE DOCTOR

parseInt(string)は、文字列が数字で始まる限り、数字以外の文字を含む文字列を数値に変換します

'10px' => 10

Number(string)は、文字列に数字以外の文字が含まれている場合にNaNを返します

'10px' => NaN
19
Steven Keith

parseInt関数を使用すると、入力文字列の基数を指定でき、整数値に制限されます。

parseInt('Z', 36) === 35

関数として呼び出されたNumberコンストラクターは、文字列を文法で解析し、10進数と16進数に制限されます。

 StringNumericLiteral ::: 
 StrWhiteSpaceopt 
 StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt
 
 StrWhiteSpace ::: 
 StrWhiteSpaceChar StrWhiteSpaceopt
 
 StrWhiteSpaceChar ::: 
 WhiteSpace 
 LineTerminator 
 
 StrNumericLiteral ::: 
 StrDecimalLiteral 
 HexIntegerLiteral 
 
 StrDecimalLiteral ::: 
 StrUnsignedDecimalLiteral 
 + StrUnsignedDecimalLiteral 
 - StrUnsignedDecimalLiteral 
 
 StrUnsignedDecimalLiteral ::: 
 Infinity 
 DecimalDigits  DecimalDigitsopt ExponentPartopt 
  DecimalDigits ExponentPartopt     
 DecimalDigits ExponentPartopt
 
 DecimalDigits ::: 
 DecimalDigit 
 DecimalDigits DecimalDigit 
 
 DecimalDigit ::: one of1 2 3 4 5 6 7 8 9 
 
 ExponentPart ::: 
 ExponentIndicator SignedInteger 
 
 ExponentIndicator ::: one ofe E 
 
 SignedInteger ::: 
 DecimalDigits 
 + DecimalDigits 
 - DecimalDigits 
 
 HexIntegerLiteral ::: 
 x HexDigit 
 X HexDigit 
 HexIntegerLiteral HexDigit 
 
 HexDigit ::: one of1 2 3 4 5 6 7 8 9 abcdef ABCDEF
8
ChaosPandion

@sjngmの回答の補遺:

どちらも空白を無視します:

var foo = "3"; console.log(parseInt(foo)); // 3 console.log(Number(foo)); // 3

正確ではありません。 sjngmが書いたように、parseIntは文字列を最初の数に解析します。それは本当です。しかし問題は、空白で区切られた数値を解析したい場合です。 「12 345」。その場合
parseInt("12 345")は、12の代わりに12345を返します。そのため、この状況を回避するには、数値に解析する前に空白をトリムする必要があります。私の解決策は次のとおりです。

     var number=parseInt("12 345".replace(/\s+/g, ''),10);

ParseInt()関数で使用した余分なことに注意してください。 parseInt("string",10)は、numberを10進形式に設定します。 「=」などの文字列を解析する場合、8は8進数ではないため、0になります。説明は here

6
dicoder

@sjngmの回答の補遺:

どちらも空白を無視します:

var foo = "    3     ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3
3
Niels Bom