Прочтите о возможном раскрытии алгоритма структурированного клонирования в основных браузерах.

В сети много дискуссий о глубоком клонировании в JavaScript. Хотя существуют собственные решения, такие как деструктуризация или Object.assign() для мелких клонов, глубокие клоны должны были быть созданы с использованием сторонних библиотек, таких как Lodash, или с использованием API-интерфейсов, таких как MessageChannel, чтобы воспользоваться преимуществами неэкспонированных реализаций структурированного клонирования, как предлагается стандарт HTML.

Судя по использованию сторонних библиотек, таких как Lodash, популярности вопросов, касающихся глубокого клонирования в JavaScript в Stack Overflow, а также распространенного (и во многих случаях проблематичного) использования JSON.parse(JSON.stringify(...), со стороны разработчиков, похоже, существует большой спрос. для нативного решения.

Структурированное клонирование

Алгоритм структурированного клонирования был предложен стандартом HTML, уже реализован в обычных браузерах и используется внутри компании (т. Е. Для передачи данных между веб-рабочими или для хранения данных с помощью IndexedDB).

Он рекурсивно просматривает объект, который нужно клонировать, и поддерживает карту посещенных ссылок, чтобы избежать бесконечных циклов. Поэтому круговые структуры не являются проблемой для этого алгоритма, например, по сравнению с подходом JSON.parse(JSON.stringify(...)).

В области JavaScript это означает, что поддерживается большинство типов (таких как Date, RegExp, Array, Object, Map и Set). Однако цепочка прототипов не рассматривается, и есть еще кое-что, о чем нужно позаботиться. Если вам интересно, посмотрите ссылку на MDN Web Docs в приведенных ниже ссылках.

Структурированный клон против глубокого клона

Глубокий клон (также глубокая копия) - это копия объекта, так что новые копии создаются для любых объектов, на которые есть ссылки. Что это означает для объектов JavaScript? Здесь становится сложно. В то время как некоторые люди могут быть удовлетворены только структурными данными, другие могут захотеть скопировать цепочку прототипов. Итак, глубокий клон - это довольно неточный термин.

С другой стороны, алгоритм структурированного клона является четко определенным алгоритмом и поэтому довольно хорошо определяет, что такое структурированный клон. Можно сказать, что это конкретная реализация глубокого клона.

Структурированное клонирование в браузерах?

Хотя Node.js представил реализацию структурированного клонирования движком v8 JS в качестве своего API сериализации, многие люди все еще ждут открытой реализации браузера. Если вы один из этих людей, есть хорошие новости: предложение в спецификации HTML уже существует.

К сожалению, похоже, что на момент написания статьи только Firefox был заинтересован в его реализации. Тем не менее, эта тема все еще обсуждается, так что не теряйте надежды, если вы жаждете этой функции.

Даже если это только на стадии предложения, похоже, что раскрытие будет происходить в форме глобальной функции structuredClone(), которая сделает структурные клоны такими же простыми, как:

Если вам нужна эта функция, я призываю вас выступать за раскрытие алгоритма структурированного клонирования, чтобы мы могли вскоре увидеть его поверх незавершенных журналов основных браузеров.

использованная литература