将数字转换为字符串的“最佳”方法是什么(就速度优势,清晰度优势,内存优势等而言)?
一些例子:
String(n)
n.toString()
""+n
n+""
将数字转换为字符串的“最佳”方法是什么(就速度优势,清晰度优势,内存优势等而言)?
一些例子:
String(n)
n.toString()
""+n
n+""
以下是在JS中将Integer转换为String的方法
这些方法按性能的降序排列。
(性能测试结果由@DarckBlezzer在他的答案中给出)
var num = 1
方法1:
num =`$ {num}`
方法2:
num = num +''
方法3:
num =字符串(num)
方法4:
num = num.toString()
注意: 您不能直接从数字中调用tostring()
例如: 2.toString()将抛出未捕获的SyntaxError:无效或意外的令牌
如果有时间,我将使用更多数据重新编辑此文件,因为现在很好...
在Node.js v8.11.2中进行测试:2018/06/06
let i=0;
console.time("test1")
for(;i<10000000;i=i+1){
const string = "" + 1234;
}
console.timeEnd("test1")
i=0;
console.time("test1.1")
for(;i<10000000;i=i+1){
const string = '' + 1234;
}
console.timeEnd("test1.1")
i=0;
console.time("test1.2")
for(;i<10000000;i=i+1){
const string = `` + 1234;
}
console.timeEnd("test1.2")
i=0;
console.time("test1.3")
for(;i<10000000;i=i+1){
const string = 1234 + '';
}
console.timeEnd("test1.3")
i=0;
console.time("test2")
for(;i<10000000;i=i+1){
const string = (1234).toString();
}
console.timeEnd("test2")
i=0;
console.time("test3")
for(;i<10000000;i=i+1){
const string = String(1234);
}
console.timeEnd("test3")
i=0;
console.time("test4")
for(;i<10000000;i=i+1){
const string = `${1234}`;
}
console.timeEnd("test4")
i=0;
console.time("test5")
for(;i<10000000;i=i+1){
const string = 1234..toString();
}
console.timeEnd("test5")
i=0;
console.time("test6")
for(;i<10000000;i=i+1){
const string = 1234 .toString();
}
console.timeEnd("test6")
输出
test1: 72.268ms
test1.1: 61.086ms
test1.2: 66.854ms
test1.3: 63.698ms
test2: 207.912ms
test3: 81.987ms
test4: 59.752ms
test5: 213.136ms
test6: 204.869ms
方法toFixed()
也会解决目的。
var n = 8.434332;
n.toFixed(2) // 8.43
刚刚遇到这个问题,方法3和4不适合,因为如何复制字符串然后将它们放在一起。对于小型程序而言,此问题无关紧要,但是对于任何实际的Web应用程序,我们必须处理频率字符串操作的此操作可能会影响性能和可读性。
您可以先调用Number
object,然后调用toString()
。
Number.call(null, n).toString()
您可以将此技巧用于其他javascript本机对象。
如果我不得不考虑所有因素,我建议
var myint = 1;
var mystring = myint + '';
/*or int to string*/
myint = myint + ''
恕我直言,它是最快的方式转换为字符串。如果我错了,请纠正我。
.toString()是内置的类型转换函数,我对此并不熟练,但是每当我们比较内置类型转换和显式方法时,总是首选内置解决方法。
我使用https://jsperf.com为以下情况创建了一个测试用例:
number + ''
`${number}`
String(number)
number.toString()
https://jsperf.com/number-string-conversion-speed-comparison
截至2018年7月24日,结果表明这number + ''
是Chrome中最快的,与模板字符串文字相关联的Firefox。
两者String(number)
,并且number.toString()
比最快的选项慢95%左右。
我认为这取决于情况,但是无论如何您都可以使用该.toString()
方法,因为它很容易理解。
我喜欢前两个,因为它们更易于阅读。我倾向于使用,String(n)
但这仅是样式问题。
那就是除非你有一行
var n = 5;
console.log ("the number is: " + n);
这是很自我解释的
像这样:
var foo = 45;
var bar = '' + foo;
Actually, even though I typically do it like this for simple convenience, over 1,000s of iterations it appears for raw speed there is an advantage for .toString()
See Performance tests here (not by me, but found when I went to write my own): http://jsben.ch/#/ghQYR
Fastest based on the JSPerf test above: str = num.toString();
It should be noted that the difference in speed is not overly significant when you consider that it can do the conversion any way 1 Million times in 0.1 seconds.
Update: The speed seems to differ greatly by browser. In Chrome num + ''
seems to be fastest based on this test http://jsben.ch/#/ghQYR
更新2:再次根据我上面的测试,应该注意到Firefox 20.0.1的执行.toString()
速度比'' + num
示例慢约100倍。
如果需要将结果格式设置为特定的小数位数(例如代表货币),则需要类似toFixed()
方法的方法。
number.toFixed( [digits] )
digits
是小数点后显示的位数。
我认为n.toString()
该奖项以其清晰为目的,我认为它没有任何额外的开销。
... JavaScript的解析器尝试将数字上的点符号解析为浮点文字。
2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first
舌头很明显:
var harshNum = 108;
"".split.call(harshNum,"").join("");
或者在ES6中,您可以简单地使用模板字符串:
var harshNum = 108;
`${harshNum}`;
对于该语言的新手来说,显式转换非常明显。正如其他人所建议的那样,如果开发人员不了解强制规则,则使用类型强制会导致歧义。最终,开发人员的时间要比CPU时间花费更多,因此我会以后者为代价对前者进行优化。话虽这么说,这种情况下的差异可能微不足道,但是如果不是这样的话,我敢肯定,有一些不错的JavaScript压缩器可以优化这种情况。
因此,出于上述原因,我建议使用:n.toString()
或String(n)
。 String(n)
可能是一个更好的选择,因为如果n
为null或未定义,它不会失败。
对于数字文字,用于访问属性的点必须与小数点区分开。如果要在数字文字123上调用String(),则可以使用以下选项: