序列化

JSON.stringify(json对象);

反序列化:

JSON.parse(str)

深度克隆

that.checklistA= JSON.parse(JSON.stringify(that.checklistA));

JavaScript克隆 JSON方法

JSON
JSON对象包含两个方法: 用于解析JSON格式字符串将其转换成对象的 parse() 方法,以及将对象/值转换为 JSON字符串的 stringify() 方法

深度克隆
遍历对象法
遍历对象 for(var prop in obj)
判断是不是原始值 typeof() object
判断是数组还是对象 instanceof toString constructor
建立相应的数组或对象

递归

//深度克隆

function deepClone(origin, target) {
    var target = target || {},
        toStr = Object.prototype.toString,
        arrStr = '[object Array]';
    for (var prop in origin) {
        if (origin.hasOwnProperty(prop)) {
            if (origin[prop] !== 'null' && typeof(origin[prop]) == 'object') {
                // if(toStr.call(origin[prop]) == arrStr) {
                // target[prop] = [];
                // }else{
                // target[prop] = {};
                // }
                target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {}; //代替
                deepClone(origin[prop], target[prop]);
            } else {
                target[prop] = origin[prop];
            }
        }
    }
    return target;
}

JSON转换法

JSON.stringify(obj) 将对象转换成json字符串格式

JSON.parse(jsonString) 将json字符串转换成对象格式

虽然简单,但是不能克隆函数,是深度克隆但是不健全

var obj = {
    a: 5,
    b: {
        a: 3,
        b: function() {
            console.log('aa')
        }
    },
    add: function() {
        console.log('哈哈哈咿呀呀')
    }
};
//先将对象转换成json字符串,再将字符串转换成json对象
let obj1 = JSON.parse(JSON.stringify(obj));

浅克隆

es6拓展运算符…
实际上可以深克隆第一层的所有属性,因为一个拓展运算符只能展开一层


var obj1 = {...obj};
//改变obj1的第一层属性,obj的属性不会发生改变
//改变obj1的第二层属性,obj的属性也会发生改变
obj1.b.b = function() {
    console.log('cc')
};//给obj1改变属性,同时也会改变obj的属性,所以它是浅克隆

es6新方法 Object.assign
Object.assign方法实行的是浅克隆,而不是深克隆

var newObj = Object.assign({}, obj);//浅克隆

直接赋值法
var newObj = obj;

克隆dom元素 cloneNode()
let div = document.getElementById('box');
let box2 = div.cloneNode(true);

原文链接:https://blog.csdn.net/qq_36634628/article/details/108868716

文档更新时间: 2021-07-28 08:00   作者:admin