JavaScript中的parseInt(string)和Number(string)有什么区别?

时间:2010-12-30 16:08:29

标签: javascript string-conversion

JavaScript中parseInt(string)Number(string)之间的区别是什么?

6 个答案:

答案 0 :(得分:294)

parseInt("123hui")

返回123

Number("123hui")

返回NaN

换句话说,parseInt()解析到第一个非数字并返回它解析的内容。 Number()想要将整个字符串转换为数字,也可以是浮动BTW。


编辑#1:Lucero评论了可以与parseInt()一起使用的基数。就这一点而言,请参阅下面的THE DOCTOR's answer(我不打算在此复制,文档应该公平分享名声......)。


编辑#2:关于用例:这已经在线之间写了一些。如果您间接想要检查给定字符串是否完全表示数值,浮点数或整数,请使用Number()parseInt()/parseFloat()不是那么严格,因为它们只是解析并在数值停止时停止(基数!),这使得它在前面需要一个数字值时很有用“以防万一”(注意那个) parseInt("hui")也会返回NaN)。最大的区别是使用Number()不知道的基数,而parseInt()可能间接猜测给定的字符串(有时可能会导致奇怪的结果)。

答案 1 :(得分:68)

第一个采用两个参数:

parseInt(string, radix)

radix参数用于指定要使用的数字系统,例如,16(十六进制)的基数表示字符串中的数字应从十六进制数解析为十进制数。

如果省略radix参数,则JavaScript假定以下内容:

  • 如果字符串以“0x”开头,则为 基数为16(十六进制)
  • 如果字符串以“0”开头,则为 基数为8(八进制)。这个特点
    已弃用
  • 如果字符串以任何其他字符串开头 值,基数为10(十进制)

您提到的其他功能只需要一个参数:

Number(object)

Number()函数将object参数转换为表示对象值的数字。

如果无法将值转换为合法号码,则返回NaN。

答案 2 :(得分:19)

parseInt(string)会将包含非数字字符的字符串转换为数字,只要该字符串以数字字符开头

'10px' => 10

如果字符串包含任何非数字字符,则数字(字符串)将返回NaN

'10px' => NaN

答案 3 :(得分:8)

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 of
    0 1 2 3 4 5 6 7 8 9

ExponentPart :::
    ExponentIndicator SignedInteger

ExponentIndicator ::: one of
    e E

SignedInteger :::
    DecimalDigits 
    + DecimalDigits 
    - DecimalDigits

HexIntegerLiteral :::
    0x HexDigit 
    0X HexDigit 
    HexIntegerLiteral HexDigit

HexDigit ::: one of
    0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

答案 4 :(得分:6)

  

@ sjngm回答的附录:

     

他们都忽略了空格:

     

var foo =“3”;的console.log(parseInt函数(FOO)); // 3   的console.log(号码(FOO)); // 3

这不完全正确。由于 sjngm 写了parseInt,将字符串解析为第一个数字。是真的。但问题是当你想解析用空格分隔的数字时,即。 “12 345”。在这种情况下,parseInt("12 345")将返回12而不是12345。 因此,为了避免这种情况,您必须在解析为数字之前修剪空格。 我的解决方案是:

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

注意我在parseInt()函数中使用的一件事。 parseInt("string",10)会将数字设置为十进制格式。如果您要解析像“08”这样的字符串,那么你会得到0,因为 8不是八进制数。解释是here

答案 5 :(得分:3)

@ sjngm回答的附录:

他们都忽略了空格:

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