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

一些例子:

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


当前回答

开玩笑的意味很明显:

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

或者在ES6中,你可以简单地使用模板字符串:

var harshNum = 108;
`${harshNum}`;

其他回答

我认为这取决于情况,但无论如何你可以使用. tostring()方法,因为它很容易理解。

对于几乎所有可能的现有和未来情况(输入是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));
}

是这样的:

var foo = 45;
var bar = '' + foo;

实际上,尽管我这样做是为了简单方便,经过1000次迭代后它看起来是为了原始速度。tostring()有一个优势

请参阅这里的性能测试(不是我写的,而是我自己写的时候发现的): http://jsben.ch/#/ghQYR

基于上面的JSPerf测试的最快速度:str = num.toString();

值得注意的是,当您考虑到它可以在0.1秒内以任何方式进行100万次转换时,速度上的差异并不太显著。

更新:不同浏览器的速度似乎差别很大。在Chrome中num +”似乎是最快的基于这个测试http://jsben.ch/#/ghQYR

更新2:根据我上面的测试,应该注意到Firefox 20.0.1执行. tostring()的速度比“+ num”示例慢了大约100倍。

我们还可以使用String构造函数。根据这个基准测试,它是在Firefox 58中将数字转换为字符串的最快方法,尽管它比Firefox 58慢 + num在流行浏览器谷歌Chrome。

对于数字字面值,访问属性的点必须与十进制点区分。如果你想在数字文字123上调用to String(),这留给你以下选项:

123..toString()
123 .toString() // space before the dot 123.0.toString()
(123).toString()