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

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

 parseInt("123hui") 

返回123

 Number("123hui") 

返回NaN

换句话说, parseInt()parsing到第一个非数字,并返回分析的内容。 Number()希望将整个string转换为一个数字,也可以是一个浮动BTW。


编辑#1:Lucero评论可以与parseInt()一起使用的基数。 就这一点而言,请参阅下面的医生的答案 (我不打算在这里复制,文档应该有一个公平的份额…)。


编辑#2:关于用例:这已经写在线之间了。 如果您间接要检查给定的string是否完全代表数值,float或integer,则使用Number()parseInt()/parseFloat()并不严格,因为它们只是parsing并停止数值停止(radix!),这使得它有用,当你需要在前面的数字值“万一有”(注意parseInt("hui")也返回NaN )。 最大的区别是Number()不知道的基数和parseInt()可能从给定的string间接猜测(这可能会导致奇怪的结果有时)。

第一个参数有两个参数:

 parseInt(string, radix) 

radix参数用于指定要使用的数字系统,例如16(hex)的基数表示string中的数字应该从hex数字parsing为十进制数字。

如果省略了radix参数,那么JavaScript假定如下:

  • 如果string以“0x”开始,那么
    基数是16(hex)
  • 如果string以“0”开始,则基数为8(八进制)。 这个function
    已弃用
  • 如果string以任何其他值开始,则基数为10(十进制)

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

 Number(object) 

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

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

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

 '10px' => 10 

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

 '10px' => NaN 

parseInt函数允许您为inputstring指定各种半径,并将其限制为整数值。

 parseInt('Z', 36) === 35 

作为函数调用的Number构造函数将使用语法parsingstring,并将其限制在基数10和基数16之间。

 StringNumericLiteral :::
     StrWhiteSpace select 
     StrWhiteSpace 可选 StrNumericLiteral StrWhiteSpace 可选

 StrWhiteSpace :::
     StrWhiteSpaceChar StrWhiteSpace select

 StrWhiteSpaceChar :::
    空白符 
     LineTerminator

 StrNumericLiteral :::
     StrDecimalLiteral 
     HexIntegerLiteral

 StrDecimalLiteral :::
     StrUnsignedDecimalLiteral 
     + StrUnsignedDecimalLiteral 
     - StrUnsignedDecimalLiteral

 StrUnsignedDecimalLiteral :::
     无穷 
    十进制数字  DecimalDigits select ExponentPart选项 
       DecimalDigits ExponentPart select     
     DecimalDigits ExponentPart select

 DecimalDigits :::
     DecimalDigit 
    十进制数字十进制数字

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

 ExponentPart :::
     ExponentIndicator SignedInteger

 ExponentIndicator ::: 其中之一
     e

 SignedInteger :::
     DecimalDigits 
     +十进制数字 
     -十进制数字

 HexIntegerLiteral :::
     0x HexDigit 
     0X HexDigit 
     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写parseIntparsingstring到第一个数字。 这是真的。 但问题是,当你想parsing数字分隔与空白即。 “12 345”。 在这种情况下
parseInt("12 345")将返回12而不是12345 。 所以为了避免这种情况,你必须在parsing数字之前修剪空格 。 我的解决scheme是:

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

注意一个额外的东西,我在parseInt()函数中使用。 parseInt("string",10)数字设置为十进制格式 。 如果你要parsing像“08”的string,你会得到0,因为8不是一个八进制数。说明在这里

附录@ sjngm的答案:

他们都忽略空白:

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