const rabbit = {
    name: 'tori',
    color: 'white',
    size: null,
    birthDate: new Date(),

    jump: () => {
        console.log(`${name} can Jump!`);
        return 1;
    }
    //symbol: Symbol("id")
};

json = JSON.stringify(rabbit);

// string 을 obj object로 변환
let obj = JSON.parse(json);
console.log(obj); // {name: "tori", color: "white", size: null, birthDate: "2021-03-18T08:46:50.343Z"}

// ※ 주의할 점
rabbit.jump();  // rabbit 객체 안에는 jump() 라는 함수가 존재하지만
//obj.jump();   // ※ JSON에서 Object로 변환된 obj에서는 jump() 라는 함수가 존재하지 않는다.
                // rabbit object 를 JSON 으로 변환하는 과정에서 jump 함수는 string 변환에 포함되지 않았기 때문이다.
                //※ jump와 같은 함수는 JSON 의 string의 변환에 포함되지 않았기 때문에

@param text(string), @param reviver

// string 조정하여 변환하기
obj = JSON.parse(json, (key, value) => {
    console.log(`key: ${key}, value: ${value}`);
    return key === 'birthDate' ? new Date(value) : value;
    //return value;
});
console.log(obj);
// {name: "tori", color: "white", size: null, birthDate: Thu Mar 18 2021 18:13:48 GMT+0900 (대한민국 표준시)}

console.log(rabbit.birthDate.getDate()); // 18
console.log(obj.birthDate.getDate());    // 18