Некоторые вопросы, чтобы быть в курсе:
- Вы не можете назвать
JSON.stringify()
на объекте, который имеет циклические ссылки. Фактически, формат JSON сам по себе не дает никаких ограничений для указания круговой ссылки.
- Вы не можете вызвать функцию, которая внутренне полагается на
JSON.stringify()
, чтобы сериализовать данные и/или отправить сплющенный объект по проводу.
- Только очень умный код (который обнаруживает и делает правильную вещь с круговыми ссылками) может рекурсивно перебирать что-либо с помощью круглой ссылки. Довольно легко создать бесконечный цикл с относительно просто выглядящим рекурсивным итератором, если ваши данные имеют круговые ссылки в нем. Рекурсивный итерационный код также можно защитить от циклических ссылок, но проще сделать это прозрачно с объектом ES6
Set
или Map
, чем в ES5.
Пока вы не попадаете в одну из этих циклических итераций или не должны представлять свою структуру данных в JSON, нет ничего особенного в этом - иногда это просто целесообразный способ сделать что-то ,
В самом браузере есть много примеров таких циркулярных ссылок. Например, весь DOM имеет это, поскольку родительский указывает на дочерние и дочерние указывает на родителя.
node.firstChild.parentNode.firstChild.parentNode.firstChild.parentNode === node