序列化
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