257

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

4

6 に答える 6

372
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()間接的に推測する可能性があります (これにより、奇妙な結果が生じることがあります)。

于 2010-12-30T16:13:43.403 に答える
78

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

parseInt(string, radix)

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

基数パラメーターが省略されている場合、JavaScript は次のように想定します。

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

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

Number(object)

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

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

于 2010-12-30T16:13:24.893 に答える
22

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

'10px' => 10

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

'10px' => NaN
于 2010-12-30T16:16:02.513 に答える
11

この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のいずれか
    
于 2010-12-30T16:17:44.090 に答える
6

@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 が返されます。説明はこちら

于 2013-03-21T11:55:05.627 に答える
3

@sjngmの回答への補遺:

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

var foo = "    3     ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3
于 2013-02-16T16:04:29.237 に答える