var a = '1'; var b = '0x1'; var runTest = function(timeTag, testFunction) { console.time(timeTag); for (var i = 0; i < 100000000; i++) { testFunction(); } console.timeEnd(timeTag); } runTest("parseInt(a)", function() { parseInt(a); }); runTest("parseInt(a, 10)", function() { parseInt(a, 10); }); runTest("parseInt(b)", function() { parseInt(b); }); runTest("parseInt(b, 10)", function() { parseInt(b, 10); }); runTest("a * 1", function() { a * 1; });
runTest("b* 1", function() {
b * 1;
});
runTest("- 0", function() { a - 0; }); runTest("JSON.parse()", function() { JSON.parse(a); }); runTest("Number(a)", function() { Number(a); }); runTest("Number(b)", function() { Number(b); }); parseInt(a): 537.01025390625ms parseInt(a, 10): 1513.892822265625ms parseInt(b): 20277.371826171875ms parseInt(b, 10): 17531.925048828125ms a* 1: 1101.119140625ms
b* 1: 1193.64794921875ms - 0: 1126.380126953125ms JSON.parse(): 15990.590087890625ms Number(a): 1172.126953125ms Number(b): 1288.054931640625ms
综上比较,
1、本身是数字的字符串转为数字,parseInt()不带参数直接转最快;
2、字符串既包含数字又包含字母的字符串,parseInt()带10进制的参数更快,但是是所有方法中最慢的;
3、如果是纯数字组成的字符串,可以使用JSON.parse()转为数字,相比是所有方法中最慢的。
4、Number()方法和乘号、减号方法相差不大。
参考链接:https://cnodejs.org/topic/5556c5237cabb7b45ee6bca6
推荐文章:https://blog.fundebug.com/2018/07/07/string-to-number/