Нет, встроенная поддержка для построения строк отсутствует. Вместо этого вы должны использовать конкатенацию.
Конечно, вы можете создать массив из различных частей вашей строки и затем вызвать join()
для этого массива, но это зависит от того, как реализовано объединение в используемом вами интерпретаторе JavaScript.
Я провел эксперимент, чтобы сравнить скорость метода str1+str2
с методом array.push(str1, str2).join()
. Код был прост:
var iIterations =800000;
var d1 = (new Date()).valueOf();
str1 = "";
for (var i = 0; i<iIterations; i++)
str1 = str1 + Math.random().toString();
var d2 = (new Date()).valueOf();
log("Time (strings): " + (d2-d1));
var d3 = (new Date()).valueOf();
arr1 = [];
for (var i = 0; i<iIterations; i++)
arr1.push(Math.random().toString());
var str2 = arr1.join("");
var d4 = (new Date()).valueOf();
log("Time (arrays): " + (d4-d3));
Я тестировал его в Internet Explorer 8 и Firefox 3.5.5, оба на Windows 7 x64.
Вначале я тестировал на небольшом количестве итераций (несколько сотен, несколько тысяч единиц). Результаты оказались непредсказуемыми (иногда конкатенация строк занимала 0 миллисекунд, иногда - 16 миллисекунд, то же самое для объединения массивов).
Когда я увеличил счет до 50 000, результаты были разными в разных браузерах - в Internet Explorer конкатенация строк была быстрее (94 миллисекунды), а соединение было медленнее (125 миллисекунд), в то время как в Firefox соединение массивов было быстрее (113 миллисекунд), чем объединение строк (117 миллисекунд).
Затем я увеличил счет до 500'000. Теперь array.join()
был медленнее, чем конкатенация строк в обоих браузерах: конкатенация строк составила 937 мс в Internet Explorer, 1155 мс в Firefox, объединение массивов 1265 в Internet Explorer и 1207 мс в Firefox.
Максимальное число итераций, которое я мог протестировать в Internet Explorer, не имея «сценария выполняется слишком долго», составляло 850 000. Тогда Internet Explorer был 1593 для конкатенации строк и 2046 для соединения массивов, а Firefox имел 2101 для конкатенации строк и 2249 для соединения массивов.
Результаты - если число итераций невелико, вы можете попробовать использовать array.join()
, так как это может быть быстрее в Firefox. Когда число увеличивается, метод string1+string2
работает быстрее.
UPDATE
Я выполнил тест в Internet Explorer 6 (Windows XP). Процесс перестал отвечать немедленно и никогда не заканчивался, если я пробовал тестировать более 100 000 итераций.
На 40000 итераций результаты были
Time (strings): 59175 ms
Time (arrays): 220 ms
Это означает, что если вам нужна поддержка Internet Explorer 6, выберите array.join()
, что намного быстрее, чем конкатенация строк.