将数字转换为字符串的“最佳”方法是什么(从速度优势、清晰度优势、内存优势等方面考虑)?
一些例子:
字符串(n) n.toString() “”+n n+“”
将数字转换为字符串的“最佳”方法是什么(从速度优势、清晰度优势、内存优势等方面考虑)?
一些例子:
字符串(n) n.toString() “”+n n+“”
当前回答
将任何变量转换为字符串的最简单方法是向该变量添加一个空字符串。
5.41 + '' // Result: the string '5.41'
Math.PI + '' // Result: the string '3.141592653589793'
其他回答
对于几乎所有可能的现有和未来情况(输入是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));
}
当使用node.js时,结果似乎类似。我运行这个脚本:
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");
并得到以下结果:
❯ node testing.js
string concat testing: 2802.542ms
string obj testing: 3374.530ms
string both: 2660.023ms
每次运行的时间都差不多。
在我看来,n.toString()因其清晰性而获得奖励,并且我不认为它会带来任何额外的开销。
只需使用模板文字语法:
`${this.num}`
方法toFixed()也可以解决这个问题。
var n = 8.434332;
n.toFixed(2) // 8.43