首页 > 解决方案 > JavaScript:关于从字符串到整数的转换方式的性能

问题描述

将字符串转换为任意数字

方式一

console.log(+"3")

方式二

console.log("3" * 1)

方式3

console.log(~~ "3")

方式4

console.log(parseInt("3"))
console.log(parseFloat("3"))

以上所有结果都提供了相同的结果。但单独它可能会提供一些额外的功能。但我想知道哪一个最适合性能?

我认为"1"*1(way-2) 是将字符串转换为 int 的最佳方法之一。这是对的吗?如果我错了,请告诉我哪个最好,为什么?

标签: javascriptstringtypescriptecmascript-6int

解决方案


但我想知道哪一个最适合性能?

自己测试一下

const n = 3
function first (num) {
  return +num
}
function second (num) {
  return num * 1
}
function third (num) {
  return ~~ num
}
function forth (num) {
  return parseInt(num)
}

const count = 10000000
const data = new Array(count).fill(n);

console.time('first')
data.map(first)
console.timeEnd('first')

console.time('second')
data.map(second)
console.timeEnd('second')

console.time('third')
data.map(third)
console.timeEnd('third')

console.time('forth')
data.map(forth)
console.timeEnd('forth')

带随机数

function first (num) {
  return +num
}
function second (num) {
  return num * 1
}
function third (num) {
  return ~~ num
}
function forth (num) {
  return parseInt(num)
}

const data = "34 123456789 0 0.1 10 15s 1,000 011 45 4512 459 8348 3418 2342.3 4.5 34134343 341234034 3434 340 3481 3869 38906 4 1 2 45 48 38.3 xx 341,430,341 34 123456789 0 0.1 10 15s 1,000 011 45 4512 459 8348 3 906".split(' ');


console.time('first')
data.map(first)
console.timeEnd('first')

console.time('second')
data.map(second)
console.timeEnd('second')

console.time('third')
data.map(third)
console.timeEnd('third')

console.time('forth')
data.map(forth)
console.timeEnd('forth')


推荐阅读