在JavaScript中将数字转换为字符串的最佳方式是什么?
将数字转换为字符串(就速度优势,清晰度优势,内存优势等而言)的“最佳”方法是什么?在JavaScript中将数字转换为字符串的最佳方式是什么?
一些例子:
String(n)
n.toString()
""+n
n+""
这样的:
var foo = 45;
var bar = '' + foo;
其实,即使我通常不喜欢这样的简单方便,在迭代1000个出现为原始速度没有用于.toString()
优势请看这里的性能测试(不是我自己,但是当我去写自己的时候发现): http://jsben.ch/#/ghQYR
最快基于上面的JSPerf测试:str = num.toString();
应当指出的是当你认为它可以做任何改装方式1万次在0.1秒内在速度上的差异是不是太显著。
更新:浏览器的速度似乎差别很大。在Chrome中num + ''
似乎是最快的在此基础上测试http://jsben.ch/#/ghQYR
更新2:再根据我的测试上面,应该指出的是,火狐20.0.1执行.toString()
约100比'' + num
样品慢倍。
有些情况下,转换可能不会返回可取的答案:'''+ 123e-50'返回'“1.23e-48”'。 – hongymagic 2013-10-30 06:35:03
如果你看看http://jsperf.com/number-to-string/2,这个答案似乎不再是真实的。 可能值得更新:) – drublic 2015-04-27 07:21:21
@hongymagic:这个答案实际上是唯一可以想象的:数字并不关心也不知道它是如何输入的,而标准的印刷表示在点之前只有一个数字。 – Svante 2015-09-02 18:32:51
在我看来,n.toString()
为清晰起见,我认为它没有任何额外的开销。
“我不认为”不应该是一个可接受的答案。 – 2017-10-26 15:01:54
它确实带来了一些开销,即使它在最近的浏览器版本中并不重要。在Firefox量子至少 – peter 2018-02-05 06:45:48
我喜欢前两个,因为它们更容易阅读。我倾向于使用String(n)
,但这只是一个风格问题而已。
也就是说,除非你有一个行
var n = 5;
console.log ("the number is: " + n);
这是非常自我解释
最简单的方法,以任何变量转换为字符串为空字符串添加到该变量。
5.41 + '' // Result: the string '5.41'
Math.PI + '' // Result: the string '3.141592653589793'
请注意,它需要在parens里面:'(5.41 +'')'使用像'.substring()'等字符串方法 – Gjaa 2016-04-02 04:47:33
我认为这要看情况,但无论如何,你可以使用.toString()
方法,因为它是很清楚的了解。
显式转换对于那些对该语言不熟悉的人来说非常清楚。正如其他人所暗示的那样,使用类型强制,如果开发人员没有意识到强制规则,就会导致歧义。最终开发人员的时间比CPU时间更昂贵,所以我会以后者为代价优化前者。这就是说,在这种情况下,差异可能可以忽略不计,但如果不是这样,我相信有一些像样的JavaScript压缩器可以优化这类事情。
因此,由于上述原因,我会去:n.toString()
或String(n)
。 String(n)
可能是更好的选择,因为如果n
为空或未定义,它将不会失败。
问题是关于转换数字,或“空”或“未定义”。如果由于程序中的错误导致'n'为'null'或'undefined',那么我宁愿我的程序在这种状态下失败,以便更好地找到并修复错误。程序崩溃是给程序员的礼物,帮助她找到bug :-)。另一种方法是提供不按设计工作的软件,并仔细掩盖错误。所以,我不喜欢使用'String(n)'来掩盖错误。 – 2015-09-22 12:12:18
'String(n)'很适合在功能风格中使用,例如与下划线的组合'_.compose(funcThatNeedsAStringParam,String)'。 – 2017-04-17 14:21:33
String(null)不会使程序崩溃,但会返回字符串“null”,这可能不是您想要的。如果数据可以合法地为空,那么你需要明确地处理它。 – 2017-05-23 01:35:29
如果我不得不把一切都考虑进去,我会建议以下
var myint = 1;
var mystring = myint + '';
/*or int to string*/
myint = myint + ''
恕我直言,其转换为字符串的最快方法。纠正我,如果我错了。
如果您需要到格式结果为特定小数位数,例如代表货币,你需要的东西像toFixed()
方法。
number.toFixed([digits])
digits
是数字的小数位后显示的数目。
舌头在脸颊明显:
var harshNum = 108;
"".split.call(harshNum,"").join("");
或者在ES6,你可以简单地使用template strings:
var harshNum = 108;
`${harshNum}`;
2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first
如果你是好奇,这是最高性能的检查了这一点e我比较了所有不同的Number - > String转换。
看起来像2+''
或2+""
是最快的。
我们也可以使用String构造。根据this benchmark这是在Firefox 58中将数字转换为字符串的最快方式,即使它在流行的浏览器Google Chrome中的速度比 " + num
慢。
http://jsben.ch/#/ghQYR我猜不会有太大的区别,但关于纯速度检查基准。 – EscapeNetscape 2016-10-20 22:44:21