截至2018年7月24日,结果表明 number + '' 是Chrome中最快的,在Firefox中与模板字符串文字相关联 .
String(number) 和 number.toString() 都比最快的选项慢约95% .
2
如果我不得不考虑所有因素,我会建议你跟进
var myint = 1;
var mystring = myint + '';
/*or int to string*/
myint = myint + ''
恕我直言,它是转换为字符串的最快方式 . 如果我错了,请纠正我 .
1
The onlyalmost all 有效的解决方案 almost all 可能的现有和未来情况(输入是数字,空,未定义,符号,其他任何内容)是 String(x) . 基于值类型假设,例如"here I convert definitely number to string and here definitely boolean to string",不要使用3种方式进行简单操作 .
说明:
String(x) 处理空值,未定义,符号,[任何]并为对象调用 .toString() .
'' + x 调用 .valueOf() 对x(强制转换为数字),抛出符号,可以提供依赖于实现的结果 .
/**
* 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));
}
let bar;
let foo = ["45","foo"];
console.time('string concat testing');
for (let i = 0; i < 10000000; i++) {
bar = "" + foo;
}
console.timeEnd('string concat testing');
console.time("string obj testing");
for (let i = 0; i < 10000000; i++) {
bar = String(foo);
}
console.timeEnd("string obj testing");
console.time("string both");
for (let i = 0; i < 10000000; i++) {
bar = "" + foo + "";
}
console.timeEnd("string both");
21 回答
我喜欢前两个,因为它们更容易阅读 . 我倾向于使用
String(n)
,但这只是风格问题而不是其他任何问题 .这是除非你有一条线
这是非常自我解释的
像这样:
实际上,即使我通常这样做只是为了方便,但是超过1,000次的迭代它会出现 for raw speed there is an advantage for .toString()
请参阅此处的性能测试(不是我,但是当我自己编写时发现):http://jsben.ch/#/ghQYR
最快的基于上面的JSPerf测试:
str = num.toString();
应该注意的是,当您考虑到它可以以任何方式进行转换时,速度差异并不过分显着 1 Million times in 0.1 seconds .
Update: 浏览器的速度似乎有很大差异 . 在Chrome中
num + ''
似乎是基于此测试的最快http://jsben.ch/#/ghQYRUpdate 2: 再次基于我上面的测试,应该注意到Firefox 20.0.1执行
.toString()
比'' + num
样本慢大约100倍 .在我看来
n.toString()
因其清晰度而获奖,我认为它不会产生额外的开销 .明确的转换对于该语言的新手非常清楚 . 正如其他人所建议的那样,如果开发人员不了解强制规则,则使用类型强制会导致歧义 . 最终开发人员的时间比CPU时间更昂贵,因此我会以后者为代价优化前者 . 话虽这么说,在这种情况下,差异可能是微不足道的,但如果不是,我敢肯定有一些不错的JavaScript压缩器将优化这种事情 .
所以,由于上述原因,我会选择:
n.toString()
或String(n)
.String(n)
可能是更好的选择,因为如果n
为null或未定义,它将不会失败 .Source
舌头明显:
或者在ES6中你可以简单地使用template strings:
将任何变量转换为字符串的最简单方法是向该变量添加空字符串 .
其他答案已涵盖其他选项,但我更喜欢这个:
简短,简洁,已经在许多其他地方使用过(如果你使用的是现代框架/ ES版本),那么任何程序员都能理解它是安全的 .
并不是说(通常)很重要,但与other methods相比,它似乎也是among the fastest .
如果您需要 format 结果到特定的 number of decimal places, 例如表示货币,则需要类似
toFixed()
方法的内容 .digits
是小数位后显示的位数 .我认为这取决于具体情况,但无论如何你可以使用
.toString()
方法,因为它很清楚 .我使用https://jsperf.com为以下情况创建测试用例:
https://jsperf.com/number-string-conversion-speed-comparison
截至2018年7月24日,结果表明
number + ''
是Chrome中最快的,在Firefox中与模板字符串文字相关联 .String(number)
和number.toString()
都比最快的选项慢约95% .如果我不得不考虑所有因素,我会建议你跟进
恕我直言,它是转换为字符串的最快方式 . 如果我错了,请纠正我 .
The only almost all 有效的解决方案 almost all 可能的现有和未来情况(输入是数字,空,未定义,符号,其他任何内容)是
String(x)
. 基于值类型假设,例如"here I convert definitely number to string and here definitely boolean to string",不要使用3种方式进行简单操作 .说明:
String(x)
处理空值,未定义,符号,[任何]并为对象调用.toString()
.'' + x
调用.valueOf()
对x(强制转换为数字),抛出符号,可以提供依赖于实现的结果 .x.toString()
抛出nulls并且未定义 .注意:
String(x)
在无原型对象(如Object.create(null)
)上仍会失败 .如果您不喜欢'Hello,undefined'之类的字符串或想要支持无原型对象,请使用以下类型转换函数:
.toString()是内置的类型转换功能,我不是那个细节的专家,但每当我们比较内置类型铸造经文明确的方法论,内置的解决方法总是首选 .
如果你很好奇哪个是性能最高的,那就检查一下我在哪里比较所有不同的Number - > String转换 .
看起来像
2+''
或2+""
是最快的 .https://jsperf.com/int-2-string
我们也可以使用String构造函数 . 根据this benchmark,它在流行的浏览器谷歌浏览器中比
" + num
慢 .方法
toFixed()
也将解决目的 .您可以调用
Number
对象,然后调用toString()
.Number.call(null, n).toString()
您可以将此技巧用于其他javascript本机对象 .
刚刚遇到这个问题,方法3和方法4不合适,因为如何复制字符串然后放在一起 . 对于一个小程序,这个问题是微不足道的,但是对于任何真正的Web应用程序,我们必须处理频率字符串操作的这个动作会影响性能和可读性 .
Here is the link the read .
当我有时间时,我将用更多数据重新编辑它,因为现在这很好......
Test in nodejs v8.11.2: 2018/06/06
output
使用node.js时似乎有类似的结果 . 我运行了这个脚本:
并得到以下结果:
每次运行时都会出现类似的情况 .