| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Der JavaScript-Fehler "cyclic object value" tritt auf, wenn Objektverweise in JSON gefunden werden. JSON.stringify() versucht nicht, diese zu lsen, und scheitert entsprechend.
TypeError: Converting circular structure to JSON (V8-based) TypeError: cyclic object value (Firefox) TypeError: JSON.stringify cannot serialize cyclic structures. (Safari)
TypeError
Das JSON-Format untersttzt an sich keine Objektverweise (obwohl ein IETF-Draft existiert), daher versucht JSON.stringify() nicht, sie zu lsen, und scheitert entsprechend.
In einer zirkulren Struktur wie der folgenden:
const circularReference = { otherData: 123 };
circularReference.myself = circularReference;
wird JSON.stringify() fehlschlagen
JSON.stringify(circularReference);
// TypeError: cyclic object value
Um zirkulre Referenzen zu serialisieren, knnen Sie eine Bibliothek verwenden, die sie untersttzt (z.B. cycle.js) oder selbst eine Lsung implementieren, die das Finden und Ersetzen (oder Entfernen) der zyklischen Referenzen durch serialisierbare Werte erfordert.
Der folgende Codeausschnitt zeigt, wie man mit dem replacer-Parameter von JSON.stringify() eine zyklische Referenz findet und filtert (was zu Datenverlust fhrt):
function getCircularReplacer() {
const ancestors = [];
return function (key, value) {
if (typeof value !== "object" || value === null) {
return value;
}
// `this` is the object that value is contained in,
// i.e., its direct parent.
while (ancestors.length > 0 && ancestors.at(-1) !== this) {
ancestors.pop();
}
if (ancestors.includes(value)) {
return "[Circular]";
}
ancestors.push(value);
return value;
};
}
JSON.stringify(circularReference, getCircularReplacer());
// {"otherData":123,"myself":"[Circular]"}
const o = {};
const notCircularReference = [o, o];
JSON.stringify(notCircularReference, getCircularReplacer());
// [{},{}]
JSON.stringify()Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |