Как лучше всего преобразовать число в строку в JavaScript?
Какой "лучший" способ преобразовать число в строку с точки зрения скорости, ясности и использования памяти?
Вот несколько примеров:
String(n)
n.toString()
"" + n
n + ""
Какой из этих методов является наиболее эффективным, и есть ли какие-либо другие альтернативы, которые стоит рассмотреть?
5 ответ(ов)
var foo = 45;
var bar = '' + foo;
На самом деле, хотя я обычно делаю это для простоты, за тысячи итераций оказывается, что по сырой скорости есть преимущество у метода .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.
Самый простой способ преобразовать любую переменную в строку — это сложить её с пустой строкой.
Например:
5.41 + '' // Результат: строка '5.41'
Math.PI + '' // Результат: строка '3.141592653589793'
Этот подход работает для всех типов данных в JavaScript, приводя их к строковому типу.
Вот перевод вашего запроса на русский язык в формате ответа на StackOverflow:
Я планирую дополнить этот пост дополнительными данными, когда у меня будет время, но на данный момент это вполне приемлемо...
Тест в Node.js 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
Как видно из результатов, наиболее быстрые методы конкатенации строк – это test1.1
, test1.3
и test4
, в то время как методы, использующие .toString()
, значительно медленнее. Если у вас есть дополнительные вопросы или вы хотите обсудить результаты подробнее, дайте знать!
Как извлечь число из строки в JavaScript?
В чем разница между call и apply?
Как преобразовать строку, разделённую запятыми, в массив?
Как заменить символ по заданному индексу в JavaScript?
Как извлечь числа из строки в Python?