257

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

4

6 回答 6

372
parseInt("123qwe")

返回 123

Number("123qwe")

返回NaN

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


编辑#1:Lucero 评论了可以与parseInt(). 就这一点而言,请参阅下面的医生的回答(我不会在这里复制,医生应该享有相当大的名气......)。


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

于 2010-12-30T16:13:43.403 回答
78

第一个接受两个参数:

parseInt(string, radix)

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

如果 radix 参数被省略,JavaScript 假设如下:

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

你提到的另一个函数只需要一个参数:

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构造函数将使用语法解析字符串,并且仅限于 base 10 和 base 16。

字符串数字文字 :::
    StrWhiteSpace选择 
    StrWhiteSpace选择StrNumericLiteral StrWhiteSpace选择

StrWhiteSpace :::
    StrWhiteSpaceChar StrWhiteSpace选择

StrWhiteSpaceChar :::
    白色空间
    线路终结者

StrNumericLiteral :::
    StrDecimalLiteral
    HexIntegerLiteral

StrDecimalLiteral :::
    StrUnsignedDecimalLiteral
    + StrUnsignedDecimalLiteral 
     - StrUnsignedDecimalLiteral

StrUnsignedDecimalLiteral :::
    无穷 
    小数位DecimalDigits选择ExponentPart选择 
    DecimalDigits ExponentPart opt      
    DecimalDigits ExponentPart opt

十进制数 :::
    十进制数
    十进制数字

DecimalDigit ::: 0 1 
    2 3 4 5 6 7 8 9之一

指数部分 :::
    ExponentIndicator 有符号整数

ExponentIndicator ::: e E之一
    

有符号整数 :::
    十进制数
    +十进制数字 
    -十进制数字

HexIntegerLiteral :::
    0x十六进制数 
    0X十六进制数
    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 将字符串解析为第一个数字。是真的。但问题是当你想解析用空格分隔的数字时,即。“12345”。在这种情况下
parseInt("12 345")将返回12而不是12345. 因此,为避免这种情况,您必须在解析为 number 之前修剪空格。我的解决方案是:

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

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

于 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 回答