js之json序列化【解决对象引用类型方法】 - yuzhouxiaogegit/blog GitHub Wiki

json序列化方案一:这里采用的是递归进行赋值的方法,目前我还没有发现有什么场景是不满足。

/* 我在使用json序列化的过程中,发现他的缺点所有对此进行了改进 缺点:代码书写相对复杂 优点:满足100% 使用场景 */

function deepCopy(obj) {
    var result = Array.isArray(obj) ? [] : {};
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            if (typeof obj[key] === 'object' && obj[key] !== null) {
                result[key] = deepCopy(obj[key]); //递归复制
            } else {
                result[key] = obj[key];
            }
        }
    } return result
}

// 调用示例 
let tempJsonData = { "user": { "name": "zhanshan", "goods": { "clothes": "T恤", "color": "red", "Hair": "blue", "tempFun": function () { return 999999 } }, "id": 5, "sex": "男", "age": 61 } }; 
let tempFunData = deepCopy(tempJsonData);

// 修改对象中的值 
tempFunData.user.name = "wangwu"; tempFunData.user.goods.tempFun = "改变函数中的值";

console.log("\n\n")
console.log(tempJsonData, "------------原始对象中的值-------------")
console.log(tempFunData, "------------修改后对象中的值-------------")

json序列化方案二:这种方法相信很多小伙伴都用过,有一个弊端就是function 是不能进行序列化的,不过代码已经能满足大多数场景下使用了

/*

这种情况已经满足大多数情况下场景使用了
缺点:不支持序列化函数
优点:代码优雅且书写简单

*/
let tempJSON = {"user":{"name":"zhanshan","goods":{"clothes":"T恤","color":"red","Hair":"blue"},"id":5,"sex":"男","age":61}};
let tempJSON1 = JSON.parse(JSON.stringify(tempJSON));
    tempJSON1.user.name = "lishi" // 修改对象中的值
    console.log(tempJSON,"------------原始对象中的值-------------")
    console.log(tempJSON1,"------------修改后对象中的值-------------")