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