2018年1月10日

[JS] 字串轉數字使用 *1比 parseInt快

先驗證 parseInt和 *1轉化後的結果是否相同:
var strNum = "10000"
var parseNum = parseInt(strNum)
var multiplyNum = strNum * 1
typeof strNum
// "string"
typeof parseNum
// "number"
typeof multiplyNum
// "number"
parseNum
// 10000
multiplyNum
// 10000

接著比較兩種方式的效能
function testA(time, str) {
    for (i=0;i<time;++i) {
        var tmp = parseInt(str);
    }
}
function testB(time, str) {
    for (i=0;i<time;++i) {
        var tmp = str * 1;
    }
}

console.time('testA');
testA(10000000, "12345678");
console.timeEnd('testA');
// testA: 1226.073974609375ms

console.time('testB');
testB(10000000, "12345678");
console.timeEnd('testB');
// testB: 622.14208984375ms

console.time('testA');
testA(10000000, "82736491");
console.timeEnd('testA');
// testA: 1202.213134765625ms

console.time('testB');
testB(10000000, "82736491");
console.timeEnd('testB');
// testB: 619.800048828125ms

console.time('testA');
testA(10000000, "1");
console.timeEnd('testA');
// testA: 95.97900390625ms

console.time('testB');
testB(10000000, "1");
console.timeEnd('testB');
// testB: 67.47216796875ms

console.time('testA');
testA(10000000, "");
console.timeEnd('testA');
// testA: 719.873779296875ms

console.time('testB');
testB(10000000, "");
console.timeEnd('testB');
// testB: 235.06103515625ms

console.time('testA');
testA(10000000, "0");
console.timeEnd('testA');
// testA: 92.878173828125ms

console.time('testB');
testB(10000000, "0");
console.timeEnd('testB');
// testB: 74.76416015625ms