JavaScriptのparseInt(string)
との違いは何ですか?Number(string)
6 に答える
parseInt("123qwe")
123を返します
Number("123qwe")
戻り値NaN
つまりparseInt()
、最初の非数字まで解析し、解析したものを返します。Number()
文字列全体を数値に変換したいのですが、これは浮動小数点数にすることもできます。
EDIT #1: ルセロは、 とともに使用できる基数についてコメントしましたparseInt()
。それに関する限り、以下のTHE DOCTORの回答を参照してください(ここではそれをコピーするつもりはありません.Docは名声のかなりの部分を持っているはずです...)。
EDIT #2: ユースケースについて: それはすでに行間に書かれています。Number()
指定された文字列が完全に数値、float、integer を表しているかどうかを間接的に確認したい場合に使用します。parseInt()/parseFloat()
数値が停止したときに解析して停止するため(基数!)、それほど厳密ではありませparseInt("hui")
んNaN
。そして、最大の違いは基数を使用していることです。これは、指定された文字列Number()
を認識せず、parseInt()
間接的に推測する可能性があります (これにより、奇妙な結果が生じることがあります)。
最初のものは 2 つのパラメーターを取ります。
parseInt(string, radix)
基数パラメーターは、使用する数値システムを指定するために使用されます。たとえば、基数 16 (16 進数) は、文字列内の数値を 16 進数から 10 進数に解析する必要があることを示します。
基数パラメーターが省略されている場合、JavaScript は次のように想定します。
- 文字列が「0x」で始まる場合、
基数は 16 (16 進数) - 文字列が「0」で始まる場合、基数は 8 (8 進数) です。この機能
は非推奨です - 文字列が他の値で始まる場合、基数は 10 (10 進数) です。
あなたが言及した他の関数は、1つのパラメーターのみを取ります:
Number(object)
Number() 関数は、オブジェクト引数をオブジェクトの値を表す数値に変換します。
値を有効な数値に変換できない場合は、NaN が返されます。
parseInt(string)は、文字列が数字で始まる限り、数字以外の文字を含む文字列を数値に変換します
'10px' => 10
Number(string)は、文字列に数値以外の文字が含まれている場合、NaN を返します。
'10px' => NaN
このparseInt
関数を使用すると、入力文字列の基数を指定でき、整数値に制限されます。
parseInt('Z', 36) === 35
関数として呼び出されるNumber
コンストラクターは、文字列を文法で解析し、基数 10 と基数 16 に制限されます。
文字列数値リテラル ::: StrWhiteSpace オプションStrWhiteSpaceオプション StrNumericLiteral StrWhiteSpaceオプション StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpace opt StrWhiteSpaceChar ::: ホワイトスペース LineTerminator StrNumericLiteral ::: StrDecimalLiteral HexIntegerLiteral StrDecimalLiteral ::: StrUnsignedDecimalLiteral + StrUnsignedDecimalLiteral - StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: 無限 小数桁。DecimalDigits opt ExponentPart opt . DecimalDigits ExponentPartオプションDecimalDigits ExponentPart オプション 10 進数 ::: 10 進数 DecimalDigits DecimalDigit DecimalDigit ::: 0 1 2 3 4 5 6 7 8 9のいずれか ExponentPart ::: ExponentIndicator SignedInteger ExponentIndicator ::: e Eのいずれか SignedInteger ::: 10 進数 + DecimalDigits - DecimalDigits HexIntegerLiteral ::: 0x 16 進数 0X 16 進数 HexIntegerLiteral HexDigit HexDigit ::: 0 1 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")
が返されます。したがって、その状況を回避するには、 number に解析する前に空白を削除する必要があります。私の解決策は次のとおりです。12
12345
var number=parseInt("12 345".replace(/\s+/g, ''),10);
parseInt() 関数で使用したもう 1 つの点に注意してください。数値を 10 進形式parseInt("string",10)
に設定します。「08」のような文字列を解析すると、8 は 8 進数ではないため、0 が返されます。説明はこちら
@sjngmの回答への補遺:
どちらも空白を無視します。
var foo = " 3 ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3