Đối với phần còn lại / trải rộng đối tượng tham chiếu được hoàn thành trong ECMAScript 2018 như là một giai đoạn 4. Đề xuất có thể được tìm thấy ở đây .
Đối với hầu hết các phần đặt lại và trải rộng đối tượng hoạt động theo cùng một cách, điểm khác biệt chính là trải rộng xác định các thuộc tính, trong khi Object.assign () đặt chúng . Điều này có nghĩa là Object.assign () kích hoạt setters.
Điều đáng ghi nhớ là khác với điều này, đối tượng nghỉ ngơi / trải rộng 1: 1 ánh xạ tới Object.assign () và hoạt động khác với trải rộng mảng (lặp lại). Ví dụ, khi trải một giá trị null mảng được trải rộng. Tuy nhiên, việc sử dụng các giá trị null của đối tượng được truyền âm thầm thành không có gì.
Ví dụ về lây lan mảng (lặp lại)
const x = [1, 2, null , 3];
const y = [...x, 4, 5];
const z = null;
console.log(y); // [1, 2, null, 3, 4, 5];
console.log([...z]); // TypeError
Ví dụ trải rộng đối tượng
const x = null;
const y = {a: 1, b: 2};
const z = {...x, ...y};
console.log(z); //{a: 1, b: 2}
Điều này phù hợp với cách Object.assign () hoạt động, cả hai đều âm thầm loại trừ giá trị null không có lỗi.
const x = null;
const y = {a: 1, b: 2};
const z = Object.assign({}, x, y);
console.log(z); //{a: 1, b: 2}