Вопрос проверяет понимание эффективных методов работы со строками в JavaScript и причин неэффективности наивной конкатенации.
Строки в JavaScript являются неизменяемыми (immutable). Когда вы используете оператор '+' для объединения строк, создается новая строка, содержащая копию обеих исходных строк. При конкатенации миллиона строк в цикле каждая новая итерация копирует всю предыдущую накопленную строку, что приводит к квадратичной сложности O(n²) по времени и памяти. Например, для 1 миллиона строк потребуется около 500 миллиардов операций копирования символов.
Метод join() сначала собирает все строки в массив, а затем за один проход объединяет их, выделяя память ровно под итоговую строку. Это дает линейную сложность O(n).
// Неэффективно: O(n²)
let result = '';
for (let i = 0; i < 1000000; i++) {
result += 'строка ' + i;
}
// Эффективно: O(n)
const parts = [];
for (let i = 0; i < 1000000; i++) {
parts.push('строка ' + i);
}
const result = parts.join('');В современных движках JavaScript (V8, SpiderMonkey) есть оптимизации для простых случаев конкатенации, но они не гарантированы для больших объемов. Для максимальной производительности всегда используйте массив и join().
Вывод: Используйте метод join() массива для объединения большого количества строк. Это стандартный и самый эффективный подход в JavaScript, который следует применять всегда, когда количество строк превышает несколько десятков.