JavaScript中parseInt(string)
和Number(string)
之间的区别是什么?
答案 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假定以下内容:
您提到的其他功能只需要一个参数:
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