這是一個典型的循環引用的錯誤,一個對象里引用自己就會立刻得到這個錯誤:
obj = { x:555, y: "hi" };
obj.myself = obj;
try{
json = JSON.stringify(obj);
alert(json)
}catch(e){
alert(e);
}
演示:http://jsfiddle.net/walker/tqcNm/18/
這時候可以利用stringify的第二個參數,傳一個處理器進去:
obj = { x:555, y: "hi" };
obj.myself = obj;
alert(print(obj));
//這次把自身引用去掉再試試
obj.myself={a:'hello'};
alert(print(obj));
function print(obj){
try{
seen = [];
json = JSON.stringify(obj, function(key, val) {
if (typeof val == "object") {
if (seen.indexOf(val) >= 0) return;
seen.push(val)
}
return val;
});
return json;
}catch(e){
return e;
}
}
