--- title: 'TypeError: cyclic object value(TypeError: циклическое значение объекта)' slug: Web/JavaScript/Reference/Errors/Cyclic_object_value tags: - Ошибка - Ошибки translation_of: Web/JavaScript/Reference/Errors/Cyclic_object_value ---
TypeError: циклическое значение объекта (Firefox) TypeError: преобразование круговой структуры в JSON (Chrome и Opera) TypeError: циклическая ссылка в аргументе значения не поддерживается (Edge)
{{jsxref("TypeError")}}
The JSON format per se doesn't support object references (although an IETF draft exists), hence {{jsxref("JSON.stringify()")}} doesn't try to solve them and fail accordingly.
В круговой структуре как эта
var circularReference = {otherData: 123}; circularReference.myself = circularReference;
{{jsxref("JSON.stringify()")}} закончится неудачей
JSON.stringify(circularReference); // TypeError: циклическое значение объекта
Для сериализации циклических ссылок можно использовать библиотеку, которая их поддерживает (например, cycle.js) или самостоятельно реализовать решение, которое потребует поиска и замены (или удаления) циклических ссылок сериализуемыми значениями.
Во фрагменте кода ниже показано, как найти и отфильтровать циклическую ссылку (что приводит к потере данных) с помощью параметра replacer
{{jsxref("JSON.stringify()")}}:
const getCircularReplacer = () => { const seen = new WeakSet(); return (key, value) => { if (typeof value === "object" && value !== null) { if (seen.has(value)) { return; } seen.add(value); } return value; }; }; JSON.stringify(circularReference, getCircularReplacer()); // {"otherData":123}