aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/errors/cyclic_object_value
diff options
context:
space:
mode:
Diffstat (limited to 'files/ru/web/javascript/reference/errors/cyclic_object_value')
-rw-r--r--files/ru/web/javascript/reference/errors/cyclic_object_value/index.html70
1 files changed, 70 insertions, 0 deletions
diff --git a/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html b/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html
new file mode 100644
index 0000000000..cfbf6eb56c
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html
@@ -0,0 +1,70 @@
+---
+title: 'TypeError: cyclic object value(TypeError: циклическое значение объекта)'
+slug: Web/JavaScript/Reference/Errors/Cyclic_object_value
+tags:
+ - Ошибка
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Cyclic_object_value
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщения">Сообщения</h2>
+
+<pre class="syntaxbox notranslate">TypeError: циклическое значение объекта (Firefox)
+TypeError: преобразование круговой структуры в JSON (Chrome и Opera)
+TypeError: циклическая ссылка в аргументе значения не поддерживается (Edge)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки?</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_не_так">Что не так?</h2>
+
+<p>The <a href="https://www.json.org/">JSON format</a> per se doesn't support object references (although an <a href="http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03">IETF draft exists</a>), hence {{jsxref("JSON.stringify()")}} doesn't try to solve them and fail accordingly.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>В круговой структуре как эта</p>
+
+<pre class="brush: js notranslate">var circularReference = {otherData: 123};
+circularReference.myself = circularReference;
+</pre>
+
+<p>{{jsxref("JSON.stringify()")}} закончится неудачей</p>
+
+<pre class="brush: js example-bad notranslate">JSON.stringify(circularReference);
+// TypeError: циклическое значение объекта
+</pre>
+
+
+
+<p>Для сериализации циклических ссылок можно использовать библиотеку, которая их поддерживает (например, cycle.js) или самостоятельно реализовать решение, которое потребует поиска и замены (или удаления) циклических ссылок сериализуемыми значениями.</p>
+
+<p>Во фрагменте кода ниже показано, как найти и отфильтровать циклическую ссылку (что приводит к потере данных) с помощью параметра <code>replacer</code>{{jsxref("JSON.stringify()")}}:</p>
+
+
+
+<pre class="brush: js notranslate">const getCircularReplacer = () =&gt; {
+ const seen = new WeakSet();
+ return (key, value) =&gt; {
+ if (typeof value === "object" &amp;&amp; value !== null) {
+ if (seen.has(value)) {
+ return;
+ }
+ seen.add(value);
+ }
+ return value;
+ };
+};
+
+JSON.stringify(circularReference, getCircularReplacer());
+// {"otherData":123}
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("JSON.stringify")}}</li>
+ <li><a href="https://github.com/douglascrockford/JSON-js/blob/master/cycle.js">cycle.js</a> – вводит две функции, JSON.decycle и JSON.retrocycle, что дает возможность кодирования и декодирования циклических структур и групп обеспечения доступности баз данных в расширенный и обратно совместимый формат JSON.</li>
+</ul>