JSON 方法,toJSON

排除反向引用

返回課程

重要性:5

在循環引用的簡單情況下,我們可以透過名稱從序列化中排除有問題的屬性。

但有時候我們不能只使用名稱,因為它可能同時用於循環引用和一般屬性中。因此,我們可以透過其值來檢查屬性。

let room = {
  number: 23
};

let meetup = {
  title: "Conference",
  occupiedBy: [{name: "John"}, {name: "Alice"}],
  place: room
};

// circular references
room.occupiedBy = meetup;
meetup.self = meetup;

alert( JSON.stringify(meetup, function replacer(key, value) {
  /* your code */
}));

/* result should be:
{
  "title":"Conference",
  "occupiedBy":[{"name":"John"},{"name":"Alice"}],
  "place":{"number":23}
}
*/
let room = {
  number: 23
};

let meetup = {
  title: "Conference",
  occupiedBy: [{name: "John"}, {name: "Alice"}],
  place: room
};

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

alert( JSON.stringify(meetup, function replacer(key, value) {
  return (key != "" && value == meetup) ? undefined : value;
}));

/*
{
  "title":"Conference",
  "occupiedBy":[{"name":"John"},{"name":"Alice"}],
  "place":{"number":23}
}
*/

在此我們也需要測試 key=="" 以排除第一次呼叫,在第一次呼叫中 valuemeetup 是正常的。