Thuật toán structured clone

Thuật toán structured clone sao chép các đối tượng JavaScript phức tạp. Nó được sử dụng nội bộ khi gọi structuredClone(), để truyền dữ liệu giữa các Workers thông qua postMessage(), lưu trữ các đối tượng với IndexedDB, hoặc sao chép các đối tượng cho các APIs khác.

Nó sao chép bằng cách đệ quy qua đối tượng đầu vào trong khi duy trì một bản đồ của các tham chiếu đã truy cập trước đó, để tránh việc duyệt vô hạn các cycles.

Những thứ không hoạt động với structured clone

  • Các đối tượng Function không thể được sao chép bởi thuật toán structured clone; việc cố gắng sẽ ném ra ngoại lệ DataCloneError.
  • Việc sao chép các DOM nodes cũng ném ra ngoại lệ DataCloneError.
  • Một số thuộc tính đối tượng không được bảo toàn:
    • Thuộc tính lastIndex của các đối tượng RegExp không được bảo toàn.
    • Property descriptors, setters, getters, và các tính năng tương tự metadata không được sao chép. Ví dụ: nếu một đối tượng được đánh dấu readonly với một property descriptor, nó sẽ là read/write trong bản sao, vì đó là mặc định.
    • Prototype chain không được duyệt hoặc sao chép.
    • Class private elements không được sao chép. (Mặc dù các trường nội bộ của các built-in types có thể.)

Các kiểu được hỗ trợ

Các kiểu JavaScript

Các kiểu Error

Đối với các kiểu Error, tên lỗi phải là một trong: Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError (hoặc sẽ được đặt thành "Error").

Các trình duyệt phải tuần tự hóa các thuộc tính namemessage, và dự kiến sẽ tuần tự hóa các thuộc tính "thú vị" khác của các lỗi như stack, cause, v.v.

AggregateError dự kiến sẽ được thêm vào đặc tả kỹ thuật trong whatwg/html#5749 (và đã được hỗ trợ trong một số trình duyệt).

Các kiểu Web/API

Note: Các đối tượng có thể tuần tự hóa được đánh dấu trong các tệp Web IDL với thuộc tính [Serializable].

Xem thêm