From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../errors/cyclic_object_value/index.html | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 files/ja/web/javascript/reference/errors/cyclic_object_value/index.html (limited to 'files/ja/web/javascript/reference/errors/cyclic_object_value') diff --git a/files/ja/web/javascript/reference/errors/cyclic_object_value/index.html b/files/ja/web/javascript/reference/errors/cyclic_object_value/index.html new file mode 100644 index 0000000000..0731056c8f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cyclic_object_value/index.html @@ -0,0 +1,72 @@ +--- +title: 'TypeError: cyclic object value' +slug: Web/JavaScript/Reference/Errors/Cyclic_object_value +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cyclic_object_value +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の例外 "cyclic object value" は、 JSON の中にオブジェクトの参照が見つかったときに発生します。 {{jsxref("JSON.stringify()")}} はこれを解決しようとせず、これによって失敗します。

+ +

メッセージ

+ +
TypeError: cyclic object value (Firefox)
+TypeError: Converting circular structure to JSON (Chrome and Opera)
+TypeError: Circular reference in value argument not supported (Edge)
+
+ +

エラー種別

+ +

{{jsxref("TypeError")}}

+ +

エラーの原因

+ +

JSON 形式はオブジェクト参照に対応していません (IETF の草案はありますが)。したがって {{jsxref("JSON.stringify()")}} はこれを解決しようとせず、これによって失敗します。

+ +

+ +

循環参照

+ +

次のような循環構造体では、

+ +
var circularReference = {otherData: 123};
+circularReference.myself = circularReference;
+
+ +

{{jsxref("JSON.stringify()")}} は失敗します。

+ +
JSON.stringify(circularReference);
+// TypeError: cyclic object value
+
+ +

循環参照をシリアライズするには、それに対応したライブラリ (例えば cycle.js) を使用したり、自分自身で循環参照を探してシリアライズ可能な値に置き換える (または削除する) ことを求める解決策を実装することもできます。

+ +

次のスニペットは、 {{jsxref("JSON.stringify()")}} の replacer 引数を使用して循環参照を検索してフィルタリングする方法を示しています (これによりデータ損失が発生します)。

+ +
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}
+
+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf