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 に解析する前に空白を削除する必要があります。私の解決策は次のとおりです。1212345
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