Какой лучший способ преобразовать число в строку в JavaScript? - PullRequest
449 голосов
/ 23 апреля 2011

Каков «лучший» способ преобразования числа в строку (с точки зрения преимущества в скорости, преимущества в ясности, в памяти и т. Д.)?

Некоторые примеры:

  1. String(n)

  2. n.toString()

  3. ""+n

  4. n+""

Ответы [ 21 ]

459 голосов
/ 23 апреля 2011

вот так:

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 образец.

323 голосов
/ 23 апреля 2011

По моему мнению n.toString() получает приз за его ясность, и я не думаю, что это несет какие-либо дополнительные издержки.

62 голосов
/ 23 апреля 2011

Явные преобразования очень понятны для тех, кто плохо знаком с языком.Использование принуждения типов, как предлагали другие, приводит к неоднозначности, если разработчик не осведомлен о правилах принуждения.В конечном счете, время разработки обходится дороже, чем процессорное время, поэтому я бы оптимизировал для первого за счет последнего.Тем не менее, в этом случае разница, вероятно, незначительна, но если нет, я уверен, что есть несколько достойных JavaScript-компрессоров, которые оптимизируют такие вещи.с: n.toString() или String(n).String(n), вероятно, лучший выбор, потому что он не потерпит неудачу, если n равно нулю или не определено.

25 голосов
/ 17 июня 2015

... Синтаксический анализатор JavaScript пытается проанализировать обозначение точки на числе как литерал с плавающей запятой.

2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first

Источник

15 голосов
/ 13 июня 2015

Язык в щеке, очевидно:

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

Или в ES6 вы можете просто использовать строки шаблона :

var harshNum = 108;
`${harshNum}`;
12 голосов
/ 23 апреля 2011

Самый простой способ преобразовать любую переменную в строку - это добавить пустую строку в эту переменную.

5.41 + ''    // Result: the string '5.41'
Math.PI + '' // Result: the string '3.141592653589793'
6 голосов
/ 06 мая 2014

Если вам нужно отформатировать результат с определенным числом десятичных знаков, например, для представления валюты, вам потребуется что-то вроде toFixed() метода.

number.toFixed( [digits] )

digits - количество цифр, отображаемых после десятичного знака.

6 голосов
/ 18 марта 2018

Другие ответы уже охватывали другие варианты, но я предпочитаю этот:

s = `${n}`

Короткий, лаконичный, уже используется во многих других местах (если вы используете современную платформу / версию ES), так что этобезопасная ставка, что любой программист поймет это.

Не то, чтобы это (обычно) имело большое значение, но оно также кажется среди самых быстрых по сравнению с другими методами .

2 голосов
/ 23 апреля 2011

Я думаю, что это зависит от ситуации, но в любом случае вы можете использовать метод .toString(), поскольку он очень понятен.

2 голосов
/ 23 апреля 2011

Мне нравятся первые два, потому что их легче читать. Я склонен использовать String(n), но это просто вопрос стиля, чем что-либо еще.

То есть, если у вас нет строки как

var n = 5;
console.log ("the number is: " + n);

что самоочевидно

...