Каков наилучший способ преобразования числа в строку в JavaScript?
каков "лучший" способ преобразования числа в строку (с точки зрения преимущества скорости, преимущества ясности, преимущества памяти и т. д.) ?
примеры:
String(n)
n.toString()
""+n
n+""
19 ответов
такой:
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: снова на основе моего теста выше следует отметить, что Firefox 20.0.1 выполняет .toString()
около 100 раз медленнее чем '' + num
образец.
по-моему n.toString()
принимает приз за его ясность, и я не думаю, что он несет какие-либо дополнительные накладные расходы.
явные преобразования очень понятны для кого-то, кто новичок в языке. Использование принуждения типа, как предлагали другие, приводит к двусмысленности, если разработчик не знает правил принуждения. В конечном счете время разработчика дороже, чем время процессора, поэтому я бы оптимизировал для первого за счет последнего. Тем не менее, в этом случае разница, вероятно, незначительна, но если нет, я уверен, что есть некоторые приличные компрессоры JavaScript, которые оптимизируют этот вид вещь.
Итак, по вышеуказанным причинам я бы пошел с:n.toString()
или String(n)
. String(n)
, вероятно, лучший выбор, потому что он не потерпит неудачу, если n
имеет значение null или undefined.
2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first
самый простой способ преобразовать любую переменную в строку-добавить пустую строку в эту переменную.
5.41 + '' // Result: the string '5.41'
Math.PI + '' // Result: the string '3.141592653589793'
язык-в-щеку очевидно:
var harshNum = 108;
"".split.call(harshNum,"").join("");
или в ES6 вы можете просто использовать шаблон строки:
var harshNum = 108;
`${harshNum}`;
мне нравятся первые два, так как их легче читать. Я склонен использовать String(n)
но это просто вопрос стиля, чем что-либо еще.
то есть, если у вас нет строки
var n = 5;
console.log ("the number is: " + n);
что очень понятны
Я думаю, что это зависит от ситуации, но в любом случае вы можете использовать .toString()
метод, как это очень ясно понять.
другие ответы уже охватывает и другие варианты, но я предпочитаю этот:
s = `${n}`
короткий, краткий, уже используемый во многих других местах (если вы используете современную версию framework / ES), поэтому можно с уверенностью сказать, что любой программист поймет это.
Не то, чтобы это (обычно) имеет большое значение, но это также кажется среди самых быстрых по сравнению с другие способы.
Если бы я должен был принять все во внимание, я предложу следующее
var myint = 1;
var mystring = myint + '';
/*or int to string*/
myint = myint + ''
IMHO, это самый быстрый способ преобразования в строку. Поправьте меня, если я ошибаюсь.
Если вам интересно, какой из них является наиболее эффективным, проверьте это, где я сравниваю все различные преобразования Number - > String.
выглядит так:2+''
или 2+""
самый быстрый.
просто столкнулся с этим недавно, метод 3 и 4 не подходят, потому что, как строки копируются, а затем объединяются. Для небольшой программы эта проблема незначительна, но для любого реального веб-приложения это действие, где мы имеем дело с частотными манипуляциями строк, может повлиять на производительность и читаемость.
Я собираюсь изменить это с большим количеством данных, когда у меня есть время, сейчас это нормально...
тест в nodejs v8.11.2: 2018/06/06
let i=0;
console.time("test1")
for(;i<10000000;i=i+1){
const string = "" + 1234;
}
console.timeEnd("test1")
i=0;
console.time("test1.1")
for(;i<10000000;i=i+1){
const string = '' + 1234;
}
console.timeEnd("test1.1")
i=0;
console.time("test1.2")
for(;i<10000000;i=i+1){
const string = `` + 1234;
}
console.timeEnd("test1.2")
i=0;
console.time("test1.3")
for(;i<10000000;i=i+1){
const string = 1234 + '';
}
console.timeEnd("test1.3")
i=0;
console.time("test2")
for(;i<10000000;i=i+1){
const string = (1234).toString();
}
console.timeEnd("test2")
i=0;
console.time("test3")
for(;i<10000000;i=i+1){
const string = String(1234);
}
console.timeEnd("test3")
i=0;
console.time("test4")
for(;i<10000000;i=i+1){
const string = `${1234}`;
}
console.timeEnd("test4")
i=0;
console.time("test5")
for(;i<10000000;i=i+1){
const string = 1234..toString();
}
console.timeEnd("test5")
i=0;
console.time("test6")
for(;i<10000000;i=i+1){
const string = 1234 .toString();
}
console.timeEnd("test6")
выход
test1: 72.268ms
test1.1: 61.086ms
test1.2: 66.854ms
test1.3: 63.698ms
test2: 207.912ms
test3: 81.987ms
test4: 59.752ms
test5: 213.136ms
test6: 204.869ms
похоже, что аналогичные результаты при использовании 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
похожие времена каждый раз, когда я запускал его.
Я https://jsperf.com создать тестовый случай для следующих случаев:
number + ''
`${number}`
String(number)
number.toString()
https://jsperf.com/number-string-conversion-speed-comparison
по состоянию на 24 июля 2018 года результаты говорят, что number + ''
является самым быстрым в Chrome, в Firefox, который связан с литералами строк шаблона.
и String(number)
и number.toString()
- около 95% медленнее, чем самый быстрый вариант.