将数字转换为字符串的“最佳”方法是什么(从速度优势、清晰度优势、内存优势等方面考虑)?

一些例子:

字符串(n) n.toString() “”+n n+“”


当前回答

当我有时间的时候,我会用更多的数据重新编辑这个,现在这是好的…

测试在nodejs 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()方法的东西。

number.toFixed( [digits] )

数字是小数点后要显示的位数。

显式转换对于语言新手来说非常清楚。正如其他人所建议的那样,如果开发人员不知道强制规则,使用类型强制将导致歧义。最终,开发人员的时间比CPU的时间更昂贵,所以我将以后者为代价来优化前者。话虽如此,在这种情况下,差异可能可以忽略不计,但如果不是这样,我相信有一些不错的JavaScript压缩器可以优化这类事情。

因此,出于上述原因,我选择:n. tostring()或String(n)。String(n)可能是一个更好的选择,因为如果n为空或未定义,它不会失败。

. tostring()是内置类型转换函数,我不是这方面的专家,但每当我们比较内置类型转换和显式方法时,内置的解决方案总是首选。

其他答案已经涵盖了其他选项,但我更喜欢这个:

s = `${n}`

简短,简洁,已经在许多其他地方使用过(如果您使用的是现代框架/ ES版本),所以任何程序员都能理解它。

这(通常)不是很重要,但与其他方法相比,它似乎也是最快的方法之一。

对于几乎所有可能的现有和未来情况(输入是number, null, undefined, Symbol,任何其他),唯一有效的解决方案是String(x)。不要使用3种方法进行简单的操作,基于值类型的假设,比如“这里我肯定将数字转换为字符串,这里肯定将布尔转换为字符串”。

解释:

String(x)处理空值,未定义,符号,[任何]和对象调用. tostring()。

+ x在x上调用. valueof()(转换为数字),在符号上抛出,可以提供依赖于实现的结果。

x.toString()抛出null和undefined。

注意:String(x)在没有原型的对象上仍然会失败,比如Object.create(null)。

如果你不喜欢'Hello, undefined'这样的字符串,或者想要支持无原型对象,请使用以下类型转换函数:

/**
 * Safely casts any value to string. Null and undefined are converted to ''.
 * @param  {*} value
 * @return {string}
 */
function string (str) {
  return value == null ? '' : (typeof value === 'object' && !value.toString ? '[object]' : String(value));
}