Daibor Cyber Space
学习笔记、思考和记录
JavaScript 中,字符串转数字哪种方法最快?
猜猜看

前一阵子,写 C++ 的黄老板抛过来一个致命问题:

JS 字符串转 int 最快的法子是啥?我有整形的 12 这样数据。

简直瞬间石化。

首先是在我印象里,JS 只有 Number 一个描述数字的类型;其次我很少关心用什么方法能让 JS 执行得更快。那不如这次研究一下。

JS 将 StringNumber 的方法很多。

parseInt('12');//
Number('12');//这也是我最常用的方法,Number构造函数
~~'12';//只在最初学习语法时见过,按位非
+'12';//一元运算
'12'/1;//运算
'12'*1;//运算

按照 JsPerf 上的测试 +'12' 的速度最快。

但考虑到黄老板手上数据均为整形,我决定再用下面代码,逐行注释掉执行语句在 Node.js 环境中执行,后面数字标记了各次执行结果:

let start = Date.now();
for (let i = 0; i <= 100000000; i++) {
    parseInt('12'); //291
    Number('12'); //64
    ~~'12'; //66
    +'12'; //61
    '12' / 1; //54
    '12' * 1; //48
}
let end = Date.now();
console.log(end - start);

看起来,parseInt() 方法又变成最慢的了。这应该涉及到 JS 底层运算的处理问题,后面有机会值得研究一下。


Last modified on 2020-03-04