Приведенный выше ответ действительно решает проблему, но настоящая причина такого поведения заключается в следующем:
Оператор + перегружен, чтобы служить как для сложения чисел, так и для объединения строк.Когда + получает объект (включая массив в вашем случае) для любого из операндов, он сначала вызывает абстрактную операцию ToPrimitive для значения, которая затем вызывает алгоритм [[DefaultValue]] с контекстной подсказкой числа.Какой стажер вызывает метод toString в массиве.
var val = [1,2,3] + 1;
console.log(val); // "1,2,31"
И затем вы пытаетесь распространить эту строку в массиве следующим образом:
var arr = [...val];
console.log(arr); // ["1", ",", "2", ",", "3", "1"]
Это реальная причина, почему вывидя эти запятые.