Garfields
@Garfields

Что такое циклическая ссылка?

Есть следующий пример. Как я понял, здесь такими ссылками являются room.occupiedBy = meetup; meetup.self = meetup;
Но не совсем понятно что это такое и почему они мешают преобразованию объекта в JSON.
let room = {
  number: 23
};

let meetup = {
  title: "Совещание",
  occupiedBy: [{name: "Иванов"}, {name: "Петров"}],
  place: room
};

room.occupiedBy = meetup;
meetup.self = meetup;

// Функция для удаления циклических ссылок
console.log( JSON.stringify(meetup, function replacer(key, value) {
  return (key != "" && value == meetup) ? undefined : value;
}));
  • Вопрос задан
  • 1582 просмотра
Решения вопроса 2
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Что такое циклическая ссылка?

рассмотрим следующий код:
var a = {};
a.a = a;

Теперь если мы попробуем обратиться например к a.a.a у нас получиться, и к a.a.a.a.a.a получится. При этом a == a.a == a.a.a == a.a.a.a == и т.д

Это и есть самый простой пример циклической ссылки.

... почему они мешают преобразованию объекта в JSON.

Потому что JSON по спецификации не может содержать циклических ссылок, следовательно наш объект a не может быть преобразован к JSON
Ответ написан
hzzzzl
@hzzzzl
потому что если переводить такой объект в строку, то первый ключ будет ссылаться на второй, а второй будет ссылаться на первый, а первый будет ссылаться на второй, а второй будет ссылаться на первый, а первый будет ссылаться на второй, а второй будет ссылаться на первый, а первый будет ссылаться на второй, а второй будет ссылаться на первый, а первый..... если это структура в памяти, то ничего страшного, но в строку тупо не выйдет перевести через JSON.stringify
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
16 апр. 2024, в 14:20
500 руб./за проект
16 апр. 2024, в 14:03
5000 руб./за проект
16 апр. 2024, в 13:17
5000 руб./за проект