在JavaScript中,parseInt(string)和Number(string)有什么区别?
parseInt(string)
Number(string)
第一个函数有两个参数:
parseInt(string, radix)
radix参数用于指定要使用的数字系统,例如,基数16(十六进制)表示字符串中的数字应该从十六进制数解析为十进制数。
如果省略了radix参数,JavaScript假设如下:
你提到的另一个函数只有一个参数:
Number(object)
Number()函数的作用是:将对象参数转换为表示对象值的数字。
如果该值不能转换为合法的数字,则返回NaN。
parseInt("123qwe")
返回123
Number("123qwe")
返回NaN
NaN
换句话说,parseInt()解析到第一个非数字,并返回它所解析的内容。Number()想要将整个字符串转换为一个数字,顺便说一句,这个数字也可以是一个浮点数。
parseInt()
Number()
编辑#1:Lucero评论了可以与parseInt()一起使用的基数。就这一点而言,请参阅下面的医生的回答(我不打算在这里复制它,医生将有一个公平的名声…)
编辑#2:关于用例:这在某种程度上已经写在字里行间了。当你间接地想要检查给定的字符串是否完全代表一个数值、浮点数或整数时,使用Number()。parseInt()/parseFloat()并不是那么严格,因为它们只是沿着数值进行解析,并在数值停止时停止(基数!),这使得它在你需要在前面有一个数值时非常有用(注意parseInt("hui")也返回NaN)。最大的区别是使用了Number()不知道的基数,而parseInt()可能间接地从给定的字符串中猜测(这有时会导致奇怪的结果)。
parseInt()/parseFloat()
parseInt("hui")
方法(字符串)将包含非数字字符的字符串转换为数字,只要字符串以数字字符开头
'10px' => 10
如果字符串包含任何非数字字符,(字符串)将返回NaN
'10px' => NaN
parseInt函数允许您为输入字符串指定基数,并且仅限于整数值。
parseInt
parseInt('Z', 36) === 35
作为函数调用的Number构造函数将使用语法解析字符串,并限制为以10为进制和以16为进制。
Number
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 >
var foo = " 3 ";console.log(方法(foo));/ / 3 console.log(数量(foo));/ / 3 < / p >
这并不完全正确。sjngm写parseInt解析字符串到第一个数字。这是真的。但问题是当你想解析用空格分隔的数字时。“345”。在这种情况下,parseInt("12 345")将返回12而不是12345。 所以为了避免这种情况,你必须在解析为数字之前修剪空白。 我的解决方案是:
parseInt("12 345")
12
12345
var number=parseInt("12 345".replace(/\s+/g, ''),10);
注意,我在parseInt()函数中使用了一个额外的东西。parseInt("string",10)将设置数字转为十进制格式. conf。如果你解析像“08”这样的字符串,你会得到0,因为8不是八进制数。解释是在这里
parseInt("string",10)