如何在JavaScript中将字符串转换为整数?
当前回答
这(可能)不是解析整数的最佳解决方案,但如果您需要“提取”一个整数,例如:
"1a2b3c" === 123
"198some text2hello world!30" === 198230
// ...
这将起作用(仅适用于整数):
var str='3a9b0c3d2e9f8g'函数提取器整数(str){var结果=0;无功因数=1对于(var i=str.length;i>0;i-){if(!isNaN(str[i-1])){result+=parseInt(str[i-1])*因子系数*=10}}返回结果}console.log(extractInteger(str))
当然,这也适用于解析整数,但比其他方法慢。
您也可以使用此方法解析整数,如果字符串不是数字,则返回NaN,但我不明白为什么要这样做,因为这在内部依赖于parseInt,parseInt可能更快。
var str='3a9b0c3d2e9f8g'函数提取器整数(str){var结果=0;无功因数=1对于(var i=str.length;i>0;i-){if(isNaN(str[i-1]))返回NaNresult+=parseInt(str[i-1])*因子系数*=10}返回结果}console.log(extractInteger(str))
其他回答
在我看来,没有答案涵盖所有边缘情况,因为解析浮点值会导致错误。
function parseInteger(value) {
if(value === '') return NaN;
const number = Number(value);
return Number.isInteger(number) ? number : NaN;
}
parseInteger("4") // 4
parseInteger("5aaa") // NaN
parseInteger("4.33333") // NaN
parseInteger("aaa"); // NaN
最简单的方法是这样使用+
const strTen = "10"
const numTen = +strTen // string to number conversion
console.log(typeof strTen) // string
console.log(typeof numTen) // number
我只在字符串前加了一个加号(+),这就是解决方案!
+"052254" // 52254
JavaScript中的字符串到数字:
一元+(最推荐)
+numStr易于使用,性能优于其他支持整数和小数
console.log(+'123.45') // => 123.45
其他一些选项:
正在分析字符串:
整数的parseInt(numStr)整数和小数的parseFloat(numStr)
console.log(parseInt('123.456')) // => 123
console.log(parseFloat('123')) // => 123
JavaScript函数
整数的数学函数,如round(numStr)、floor(numStr)、ceil(numStr)整数和小数的数字(numStr)
console.log(Math.floor('123')) // => 123
console.log(Math.round('123.456')) // => 123
console.log(Math.ceil('123.454')) // => 124
console.log(Number('123.123')) // => 123.123
单目运算符
所有基本一元运算符,+numStr、numStr-0、1*numStr,numStr*1和numStr/1所有都支持整数和小数注意numStr+0。它返回一个字符串。
console.log(+'123') // => 123
console.log('002'-0) // => 2
console.log(1*'5') // => 5
console.log('7.7'*1) // => 7.7
console.log(3.3/1) // =>3.3
console.log('123.123'+0, typeof ('123.123' + 0)) // => 123.1230 string
位运算符
两个波浪号~~numStr或左移0,numStr<<0只支持整数,不支持小数
console.log(~~'123') // => 123
console.log('0123'<<0) // => 123
console.log(~~'123.123') // => 123
console.log('123.123'<<0) // => 123
//正在分析console.log(parseInt('123.456'))//=>123console.log(parseFloat('123'))//=>123//功能console.log(数学楼层('123'))//=>123console.log(数学舍入('123.456'))//=>123console.log(数学.ceil('123.454'))//=>124console.log(编号('123.123'))//=>123.123//Unary公司console.log(+'123')//=>123console.log('002'-0)//=>2console.log(1*'5')//=>5console.log('7.7'*1)//=>7.7console.log(3.3/1)//=>3.3console.log('123.123'+0,typeof('123.123'+0))//=>123.1230字符串//按位(Bitwise)console.log(~~'123')//=>123console.log('0123'<<0)//=>123console.log(~~'123.123')//=>123console.log('123.123'<<0)//=>123
最快的
var x = "1000"*1;
Test
这里有一些速度比较(仅限macOS)…:)
对于Chrome,“plus”和“mul”是最快的(>700000,00运算/秒),“Math.floor”是最慢的。对于Firefox,“plus”是最慢的(!)“mul”是最快的(>900000000操作/秒)。在Safari中,“parseInt”是最快的,“number”是最慢的(但结果非常相似,>130000<31000000)。因此Safari将字符串转换为int比其他浏览器慢10倍以上。所以获胜者是“mul”:)
您可以通过此链接在浏览器上运行它https://jsperf.com/js-cast-str-to-number/1
我还测试了var x=~~“1000”;。在Chrome和Safari上,它比var x=“1000”*1慢一点(<1%),在Firefox上则快一点(<1%)。
推荐文章
- 在React Native中使用Fetch授权头
- 为什么我的球(物体)没有缩小/消失?
- 如何使用jQuery检测页面的滚动位置
- if(key in object)或者if(object. hasownproperty (key)
- 一元加/数字(x)和parseFloat(x)之间的区别是什么?
- angularjs中的compile函数和link函数有什么区别
- 删除绑定中添加的事件监听器
- 很好的初学者教程socket.io?
- HtmlSpecialChars在JavaScript中等价于什么?
- 如何删除表中特定列的第一个字符?
- React: 'Redirect'没有从' React -router-dom'中导出
- 如何在React中使用钩子强制组件重新渲染?
- 我如何使用Jest模拟JavaScript的“窗口”对象?
- 我应该如何从字符串中删除所有的前导空格?- - - - - -斯威夫特
- 我如何等待一个承诺完成之前返回一个函数的变量?