2011-04-23 105 views

回答

332

这样的:

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样品慢倍。

+34

有些情况下,转换可能不会返回可取的答案:'''+ 123e-50'返回'“1.23e-48”'。 – hongymagic 2013-10-30 06:35:03

+0

如果你看看http://jsperf.com/number-to-string/2,这个答案似乎不再是真实的。 可能值得更新:) – drublic 2015-04-27 07:21:21

+12

@hongymagic:这个答案实际上是唯一可以想象的:数字并不关心也不知道它是如何输入的,而标准的印刷表示在点之前只有一个数字。 – Svante 2015-09-02 18:32:51

222

在我看来,n.toString()为清晰起见,我认为它没有任何额外的开销。

+1

“我不认为”不应该是一个可接受的答案。 – 2017-10-26 15:01:54

+0

它确实带来了一些开销,即使它在最近的浏览器版本中并不重要。在Firefox量子至少 – peter 2018-02-05 06:45:48

2

我喜欢前两个,因为它们更容易阅读。我倾向于使用String(n),但这只是一个风格问题而已。

也就是说,除非你有一个行

var n = 5; 
console.log ("the number is: " + n); 

这是非常自我解释

9

最简单的方法,以任何变量转换为字符串为空字符串添加到该变量。

5.41 + '' // Result: the string '5.41' 
Math.PI + '' // Result: the string '3.141592653589793' 
+0

请注意,它需要在parens里面:'(5.41 +'')'使用像'.substring()'等字符串方法 – Gjaa 2016-04-02 04:47:33

2

我认为这要看情况,但无论如何,你可以使用.toString()方法,因为它是很清楚的了解。

36

显式转换对于那些对该语言不熟悉的人来说非常清楚。正如其他人所暗示的那样,使用类型强制,如果开发人员没有意识到强制规则,就会导致歧义。最终开发人员的时间比CPU时间更昂贵,所以我会以后者为代价优化前者。这就是说,在这种情况下,差异可能可以忽略不计,但如果不是这样,我相信有一些像样的JavaScript压缩器可以优化这类事情。

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

+3

问题是关于转换数字,或“空”或“未定义”。如果由于程序中的错误导致'n'为'null'或'undefined',那么我宁愿我的程序在这种状态下失败,以便更好地找到并修复错误。程序崩溃是给程序员的礼物,帮助她找到bug :-)。另一种方法是提供不按设计工作的软件,并仔细掩盖错误。所以,我不喜欢使用'String(n)'来掩盖错误。 – 2015-09-22 12:12:18

+1

'String(n)'很适合在功能风格中使用,例如与下划线的组合'_.compose(funcThatNeedsAStringParam,String)'。 – 2017-04-17 14:21:33

+0

String(null)不会使程序崩溃,但会返回字符串“null”,这可能不是您想要的。如果数据可以合法地为空,那么你需要明确地处理它。 – 2017-05-23 01:35:29

1

如果我不得不把一切都考虑进去,我会建议以下

var myint = 1; 
var mystring = myint + ''; 
/*or int to string*/ 
myint = myint + '' 

恕我直言,其转换为字符串的最快方法。纠正我,如果我错了。

3

如果您需要到格式结果为特定小数位数,例如代表货币,你需要的东西像toFixed()方法。

number.toFixed([digits]) 

digits是数字的小数位后显示的数目。

7

舌头在脸颊明显:

var harshNum = 108; 
"".split.call(harshNum,"").join(""); 

或者在ES6,你可以简单地使用template strings

var harshNum = 108; 
`${harshNum}`; 
12
2..toString(); // the second point is correctly recognized 
2 .toString(); // note the space left to the dot 
(2).toString(); // 2 is evaluated first 

Source

0

如果你是好奇,这是最高性能的检查了这一点e我比较了所有不同的Number - > String转换。

看起来像2+''2+""是最快的。

https://jsperf.com/int-2-string

0

我们也可以使用String构造。根据this benchmark这是在Firefox 58中将数字转换为字符串的最快方式,即使它在流行的浏览器Google Chrome中的速度比 " + num慢。

相关问题