在JavaScript中,parseInt(字符串)和Number(字符串)之间的区别是什么?

在JavaScript中,parseInt(string)Number(string)有什么区别?

116692 次浏览

第一个函数有两个参数:

parseInt(string, radix)

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

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

  • 如果字符串以“0x”开头,则
    . 0 基数为16(十六进制)
  • 如果字符串以“0”开头,则 基数是8(八进制)。这个特性< br > 李是弃用< / >
  • 如果字符串以其他开头 值,基数为10(十进制)

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

Number(object)

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

如果该值不能转换为合法的数字,则返回NaN。

parseInt("123qwe")

返回123

Number("123qwe")

返回NaN

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


编辑#1:Lucero评论了可以与parseInt()一起使用的基数。就这一点而言,请参阅下面的医生的回答(我不打算在这里复制它,医生将有一个公平的名声…)


编辑#2:关于用例:这在某种程度上已经写在字里行间了。当你间接地想要检查给定的字符串是否完全代表一个数值、浮点数或整数时,使用Number()parseInt()/parseFloat()并不是那么严格,因为它们只是沿着数值进行解析,并在数值停止时停止(基数!),这使得它在你需要在前面有一个数值时非常有用(注意parseInt("hui")也返回NaN)。最大的区别是使用了Number()不知道的基数,而parseInt()可能间接地从给定的字符串中猜测(这有时会导致奇怪的结果)。

方法(字符串)将包含非数字字符的字符串转换为数字,只要字符串以数字字符开头

'10px' => 10

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

'10px' => NaN

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

@sjngm回答的附录:

它们都忽略空白:

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

@sjngm回答的附录:

它们都忽略空白:

var foo = " 3 ";console.log(方法(foo));/ / 3 console.log(数量(foo));/ / 3 < / p >

这并不完全正确。sjngm写parseInt解析字符串到第一个数字。这是真的。但问题是当你想解析用空格分隔的数字时。“345”。在这种情况下,
parseInt("12 345")将返回12而不是12345。 所以为了避免这种情况,你必须在解析为数字之前修剪空白。 我的解决方案是:

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

注意,我在parseInt()函数中使用了一个额外的东西。parseInt("string",10)将设置数字转为十进制格式. conf。如果你解析像“08”这样的字符串,你会得到0,因为8不是八进制数。解释是在这里