JSON.stringify报cyclic object value错误

这是一个典型的循环引用的错误,一个对象里引用自己就会立刻得到这个错误:

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;

    }

}

演示:http://jsfiddle.net/walker/tqcNm/19/

你可能感兴趣的:(stringify)