为了账号安全,请及时绑定邮箱和手机立即绑定

在JavaScript中将字符串转换为整数?

在JavaScript中将字符串转换为整数?

在JavaScript中将字符串转换为整数?如何在JavaScript中将字符串转换为整数?
查看完整描述

4 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

在javascript中将字符串转换为数字有两种主要方法。一种方法是解析它,另一种方法是将其类型更改为数字。其他答案中的所有技巧(例如一元加)都涉及隐含地将字符串的类型强制转换为数字。您也可以使用Number函数显式执行相同的操作。

解析

var parsed = parseInt("97", 10);

parseInt和parseFloat是用于将字符串解析为数字的两个函数。解析会在遇到无法识别的字符时静默停止,这对于解析像“92px”这样的字符串很有用,但它也有点危险,因为它不会在输入错误时给你任何错误,而是你除非字符串以数字开头,否则将返回NaN。字符串开头的空格将被忽略。这是一个例子,它做了一些不同于你想要的东西,并没有表明出现任何问题:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

总是将基数指定为第二个参数是一种好习惯。在较旧的浏览器中,如果字符串以0开头,如果未指定基数,则会将其解释为八进制,这会让很多人感到意外。如果没有指定基数,则通过使字符串以0x开头来触发十六进制的行为,例如0xff。标准实际上使用ecmascript 5进行了更改,因此如果没有指定基数,则当前导0时,现代浏览器不再触发八进制。parseInt将基数理解为基数36,在这种情况下,大写和小写字母都被视为等价。

将字符串的类型更改为数字

上面提到的所有其他不使用parseInt的技巧都涉及隐式地将字符串强制转换为数字。我更愿意明确地这样做,

var cast = Number("97");

这与解析方法有不同的行为(尽管它仍然忽略空格)。它更严格:如果它不理解整个字符串而不是它返回NaN,那么你不能将它用于像字符串这样的字符串97px。由于您需要原始数字而不是数字包装器对象,因此请确保不要放在new数字函数前面。

显然,转换为Number会给出一个可能是float而不是整数的值,所以如果你想要一个整数,你需要修改它。有几种方法可以做到这一点:

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.roundvar fixed = Number("97.654").toFixed(0); 
// rounded rather than truncatedvar bitwised = Number("97.654")|0;  // do not use for large numbers

任何按位运算符(这里我做了一个按位或,但你也可以做一个双重否定,如在前面的回答或一个位移)将把值转换为32位整数,其中大多数将转换为有符号整数。请注意,这不希望您想要大整数。如果整数不能用32位表示,它将换行。

~~"3000000000.654" === -1294967296// This is the same asNumber("3000000000.654")|0"3000000000.654" >>> 0 === 3000000000 
// unsigned right shift gives you an extra bit"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

要使用更大的数字,您应该使用舍入方法

Math.floor("3000000000.654") === 3000000000// This is the same asMath.floor(Number("3000000000.654"))

请记住,所有的这些方法的理解指数形式,所以2e2200不是NaN的。此外,Number理解“Infinity”,而解析方法则不理解。

习惯

这些方法中的任何一种都不可能完全符合您的要求。例如,通常我希望在解析失败时抛出错误,并且我不需要支持Infinity,指数或前导空格。根据您的用例,有时编写自定义转换函数是有意义的。

始终检查Number或其中一个解析方法的输出是否是您期望的数字。您几乎肯定会想要isNaN确保该数字不是NaN(通常是您发现解析失败的唯一方法)。


查看完整回答
反对 回复 2019-05-29
  • 4 回答
  • 0 关注
  • 2554 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信