在JavaScript中,parseInt(字符串)和Number(字符串)之间的区别是什么?
当前回答
parseInt("123qwe")
返回123
Number("123qwe")
返回南
换句话说,parseInt()一直解析到第一个非数字,并返回它所解析的内容。Number()想要将整个字符串转换为一个数字,顺便说一句,这个数字也可以是一个浮点数。
编辑#1:Lucero评论了可以与parseInt()一起使用的基数。就这一点而言,请参阅下面医生的回答(我不打算在这里复制,医生应该有一个公平的份额…)
EDIT #2: Regarding use cases: That's somewhat written between the lines already. Use Number() in cases where you indirectly want to check if the given string completely represents a numeric value, float or integer. parseInt()/parseFloat() aren't that strict as they just parse along and stop when the numeric value stops (radix!), which makes it useful when you need a numeric value at the front "in case there is one" (note that parseInt("hui") also returns NaN). And the biggest difference is the use of radix that Number() doesn't know of and parseInt() may indirectly guess from the given string (that can cause weird results sometimes).
其他回答
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
parseInt(string)将包含非数字字符的字符串转换为数字,只要字符串以数字字符开头
'10px' => 10
如果字符串包含任何非数字字符,Number(string)将返回NaN
'10px' => NaN
@sjngm回答的附录: 它们都忽略空白: Var foo = " 3 ";console.log(方法(foo));/ / 3 console.log(数量(foo));/ / 3
这并不完全正确。作为sggnm写parseInt解析字符串到第一个数字。这是真的。但问题是当你想解析用空格分隔的数字时。“345”。在这种情况下,parseInt("12 345")将返回12而不是12345。 因此,为了避免这种情况,必须在解析数字之前删除空白。 我的解决方案是:
var number=parseInt("12 345".replace(/\s+/g, ''),10);
注意,我在parseInt()函数中使用了一个额外的东西。parseInt("string",10)将数字设置为十进制格式。如果你解析像“08”这样的字符串,你会得到0,因为8不是八进制数。解释在这里
parseInt("123qwe")
返回123
Number("123qwe")
返回南
换句话说,parseInt()一直解析到第一个非数字,并返回它所解析的内容。Number()想要将整个字符串转换为一个数字,顺便说一句,这个数字也可以是一个浮点数。
编辑#1:Lucero评论了可以与parseInt()一起使用的基数。就这一点而言,请参阅下面医生的回答(我不打算在这里复制,医生应该有一个公平的份额…)
EDIT #2: Regarding use cases: That's somewhat written between the lines already. Use Number() in cases where you indirectly want to check if the given string completely represents a numeric value, float or integer. parseInt()/parseFloat() aren't that strict as they just parse along and stop when the numeric value stops (radix!), which makes it useful when you need a numeric value at the front "in case there is one" (note that parseInt("hui") also returns NaN). And the biggest difference is the use of radix that Number() doesn't know of and parseInt() may indirectly guess from the given string (that can cause weird results sometimes).
第一个函数有两个参数:
parseInt(string, radix)
radix参数用于指定要使用的数字系统,例如,基数16(十六进制)表示字符串中的数字应该从十六进制数解析为十进制数。
如果省略了radix参数,JavaScript假设如下:
如果字符串以“0x”开头,则 基数是16(十六进制) 如果字符串以“0”开头,则 基数是8(八进制)。这个特性 被弃用 如果字符串以任何其他开头 值,基数为10(十进制)
你提到的另一个函数只有一个参数:
Number(object)
Number()函数的作用是:将对象参数转换为表示对象值的数字。
如果该值不能转换为合法的数字,则返回NaN。
推荐文章
- 如何在Typescript中解析JSON字符串
- Javascript reduce()在对象
- 在angularJS中& vs @和=的区别是什么
- 错误"Uncaught SyntaxError:意外的标记与JSON.parse"
- JavaScript中的querySelector和querySelectorAll vs getElementsByClassName和getElementById
- 给一个数字加上st, nd, rd和th(序数)后缀
- 如何以编程方式触发引导模式?
- setTimeout带引号和不带括号的区别
- 在JS的Chrome CPU配置文件中,'self'和'total'之间的差异
- 用javascript检查输入字符串中是否包含数字
- 如何使用JavaScript分割逗号分隔字符串?
- 在Javascript中~~(“双波浪号”)做什么?
- 谷歌chrome扩展::console.log()从后台页面?
- 未捕获的SyntaxError:
- [].slice的解释。调用javascript?