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
Functionkhô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
lastIndexcủa các đối tượngRegExpkhô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ể.)
- Thuộc tính
Các kiểu được hỗ trợ
>Các kiểu JavaScript
ArrayArrayBufferBooleanDataViewDate- Các kiểu
Error(nhưng xem Các kiểu Error bên dưới). MapNumber- Các đối tượng
Object: nhưng chỉ các đối tượng đơn giản (ví dụ: từ object literals). - Primitive types, trừ
symbol. RegExp: nhưng lưu ý rằnglastIndexkhông được bảo toàn.SetStringTypedArray
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 name và message, 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
AudioDataBlobCropTargetCryptoKeyDOMException: các trình duyệt phải tuần tự hóa các thuộc tínhnamevàmessage. Các thuộc tính khác cũng có thể được tuần tự hóa/sao chép.DOMMatrixDOMMatrixReadOnlyDOMPointDOMPointReadOnlyDOMQuadDOMRectDOMRectReadOnlyEncodedAudioChunkEncodedVideoChunkFencedFrameConfigFileFileListFileSystemDirectoryHandleFileSystemFileHandleFileSystemHandleGPUCompilationInfoGPUCompilationMessageGPUPipelineErrorImageBitmapImageDataRTCCertificateRTCEncodedAudioFrameRTCEncodedVideoFrameVideoFrameWebTransportError
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].