JavaScriptのparseInt(string)
とNumber(string)
の違いは何ですか?
parseInt("123hui")
123を返します
Number("123hui")
NaN
を返します
言い換えれば、parseInt()
は最初の非数字まで解析し、解析したものをすべて返します。 Number()
は、文字列全体を数値に変換したいと考えています。これは、浮動小数点の場合もあります。
編集#1:Luceroは、parseInt()
と共に使用できる基数についてコメントしました。それに関する限り、 医師の答え を参照してください(ここではコピーしませんが、ドキュメントには名声のかなりの部分があります...)。
編集#2:ユースケースについて:それはすでに行の間にいくらか書かれています。与えられた文字列が完全に数値、浮動小数点数または整数を表しているかどうかを間接的に確認したい場合は、Number()
を使用します。 parseInt()/parseFloat()
は厳密に解析されず、数値が停止すると(radix!)停止するため、厳密ではありません。これは、「1つある場合」の前に数値が必要な場合に役立ちます(注意してください) parseInt("hui")
もNaN
を返します。そして、最大の違いは、Number()
が知らない基数の使用であり、parseInt()
は与えられた文字列から間接的に推測する場合があります(時々奇妙な結果を引き起こす可能性があります)。
最初のものは2つのパラメーターを取ります。
parseInt(string, radix)
基数パラメーターは、使用する数値システムを指定するために使用されます。たとえば、基数16(16進数)は、ストリング内の数値を16進数から10進数に解析することを示します。
Radixパラメーターが省略された場合、JavaScriptは以下を想定します。
あなたが言及した他の関数は、1つのパラメーターのみを取ります。
Number(object)
Number()関数は、オブジェクトの引数をオブジェクトの値を表す数値に変換します。
値を有効な数値に変換できない場合、NaNが返されます。
parseInt(string)は、文字列が数字で始まる限り、数字以外の文字を含む文字列を数値に変換します
'10px' => 10
Number(string)は、文字列に数字以外の文字が含まれている場合にNaNを返します
'10px' => NaN
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
@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
@sjngmの回答の補遺:
どちらも空白を無視します:
var foo = " 3 ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3