JavaScript 中parseInt(string)
和之间有什么区别Number(string)
?
JavaScript 中的 parseInt(string) 和 Number(string) 有什么区别?
parseInt("123qwe")
返回 123
Number("123qwe")
回报 NaN
换句话说,parseInt()
解析到第一个非数字并返回它解析的任何内容。Number()
想把整个字符串转换成一个数字,顺便说一句,它也可以是一个浮点数。
编辑 #1:Lucero 评论了可以与parseInt()
. 就这一点而言,请参阅下面的医生的回答(我不会在这里复制,该医生将享有相当的名气......)。
编辑#2:关于用例:这已经有点写在两行之间了。使用Number()
的情况下,您间接要检查给定的字符串完全代表一个数值,浮点或整数。parseInt()/parseFloat()
不是那么严格,因为它们只是在数值停止时继续解析并停止(基数!),这在您需要前面的数值“以防万一”时非常有用(注意parseInt("hui")
也返回NaN
)。最大的区别是使用了Number()
不知道并且parseInt()
可能从给定字符串间接猜测的基数(有时会导致奇怪的结果)。
第一个需要两个参数:
parseInt(string, radix)
radix 参数用于指定使用哪种数字系统,例如基数为 16(十六进制)表示字符串中的数字应从十六进制数解析为十进制数。
如果省略 radix 参数,JavaScript 假定如下:
- 如果字符串以“0x”开头,则
基数为16(十六进制) - 如果字符串以“0”开头,则基数为 8(八进制)。此功能
已弃用 - 如果字符串以任何其他值开头,则基数为 10(十进制)
您提到的另一个函数只需要一个参数:
Number(object)
Number() 函数将对象参数转换为表示对象值的数字。
如果该值无法转换为合法数字,则返回 NaN。
parseInt(string)将包含非数字字符的字符串转换为数字,只要字符串以数字字符开头
'10px' => 10
如果字符串包含任何非数字字符,则Number(string)将返回 NaN
'10px' => NaN
该parseInt
函数允许您为输入字符串指定基数,并且仅限于整数值。
parseInt('Z', 36) === 35
作为Number
函数调用的构造函数将使用语法解析字符串,并且限制为基数 10 和基数 16。
StringNumericLiteral ::: StrWhiteSpace选择 StrWhiteSpace选择StrNumericLiteral StrWhiteSpace选择 StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpace选择 StrWhiteSpaceChar ::: 空白 行终止符 StrNumericLiteral ::: StrDecimalLiteral 十六进制整数文字 StrDecimalLiteral ::: StrUnsignedDecimalLiteral + StrUnsignedDecimalLiteral - StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: 无穷 小数。DecimalDigits选择ExponentPart选择 。DecimalDigits ExponentPart选择 DecimalDigits ExponentPart选择 十进制数字 ::: 十进制数字 十进制数字十进制数字 DecimalDigit :::之一 0 1 2 3 4 5 6 7 8 9 指数部分 ::: 指数指标有符号整数 ExponentIndicator :::之一 ËË 有符号整数 ::: 十进制数字 + DecimalDigits - DecimalDigits HexIntegerLiteral ::: 0x十六进制数字 0X十六进制数字 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所写, parseInt 将字符串解析为第一个数字。是真的。但问题是当你想解析用空格分隔的数字时,即。“12345”。在那种情况下parseInt("12 345")
将返回12
而不是12345
. 因此,为避免这种情况,您必须在解析为 number 之前修剪空格。我的解决方案是:
var number=parseInt("12 345".replace(/\s+/g, ''),10);
请注意我在 parseInt() 函数中使用的另一件事。parseInt("string",10)
将数字设置为十进制格式。如果你解析像 "08" 这样的字符串,你会得到 0,因为8 不是八进制数。说明在这里