The spread (...) syntax allows an iterable, such as an array or string, to be expanded in places where zero or more arguments (for function calls) or elements (for array literals) are expected. In an object literal, the spread syntax enumerates the properties of an object and adds the key-value pairs to the object being created.| developer.mozilla.org
The Object.assign() static method copies all enumerable own properties from one or more source objects to a target object. It returns the modified target object.| developer.mozilla.org
The slice() method of Array instances returns a shallow copy of a portion of an array into a new array object selected from start to end (end not included) where start and end represent the index of items in that array. The original array will not be modified.| developer.mozilla.org
The Array.from() static method creates a new, shallow-copied Array instance from an iterable or array-like object.| developer.mozilla.org
The concat() method of Array instances is used to merge two or more arrays. This method does not change the existing arrays, but instead returns a new array.| developer.mozilla.org
An object reference is a link to an object. Object references can be used exactly like the linked objects.| developer.mozilla.org
A deep copy of an object is a copy whose properties do not share the same references (point to the same underlying values) as those of the source object from which the copy was made. As a result, when you change either the source or the copy, you can be assured you're not causing the other object to change too. That behavior contrasts with the behavior of a shallow copy, in which changes to nested properties in the source or the copy may cause the other object to change too.| developer.mozilla.org