Мелкая копия означает, что все элементы из first
и second
просто добавляются в новый массив, новую копию. Глубокое копирование будет означать, что все элементы из first
и second
сначала копируются, а затем добавляются в новый массив.
Различие заключается в том, копируются ли сами элементы в новый объект перед добавлением в новый массив.
Используя примитивы, такие как числа, на самом деле невозможно проиллюстрировать разницу, но если вы используете объекты, разница довольно очевидна.
Скажем, у вас есть что-то вроде этого:
let first = [{foo: 'bar'}];
let second = [{fizz: 'buzz'}];
let both = [...first, ...second];
Поскольку распространение результатов в мелкой копии позволяет ожидать, что соответствующие объекты пройдут тест на равенство:
first[0] === both[0]; // true
second[0] === both[1]; // true
Но если распространение привело к глубокому копированию, можно ожидать, что тест на равенство не пройдёт:
first[0] === both[0]; // false
second[0] === both[1]; // false