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

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

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



互换的青春
浏览 2569回答 4
4回答

30秒到达战场

在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"))请记住,所有的这些方法的理解指数形式,所以2e2是200不是NaN的。此外,Number理解“Infinity”,而解析方法则不理解。习惯这些方法中的任何一种都不可能完全符合您的要求。例如,通常我希望在解析失败时抛出错误,并且我不需要支持Infinity,指数或前导空格。根据您的用例,有时编写自定义转换函数是有意义的。始终检查Number或其中一个解析方法的输出是否是您期望的数字。您几乎肯定会想要isNaN确保该数字不是NaN(通常是您发现解析失败的唯一方法)。
打开App,查看更多内容
随时随地看视频慕课网APP