龙空技术网

js中对象数据类型的深拷贝方法(5种)

你的Maya 88

前言:

目前朋友们对“js对象复制”大体比较注重,小伙伴们都想要学习一些“js对象复制”的相关知识。那么小编在网络上汇集了一些有关“js对象复制””的相关资讯,希望看官们能喜欢,兄弟们快快来学习一下吧!

一、使用JSON暴力转换

通过JSON.stringify() 和 JSON.parse() 将对象转为字符串之后再转为对象。

var obj = {name:'123'};var obj2 = JSON.parse(JSON.stringify(obj))
二、 使用拓展运算符+解构赋值

方法的局限性在于,当值为undefined、function、symbol会在转换过程中被忽略。

var obj = {name:'123',age:13};var obj2 = {...obj}
三、 使用对象的合并,即通过Object.assign()方法

注意:该方法的第一个参数必须是空对象

var obj = {name:'123',age:13};var obj2 = Object.assign({},obj);
四、通过遍历对象
var obj1 = {name:"123"};var obj2 = {};for(x in obj1) {    obj2[x] = obj1[x];}
五、利用循环递归

以上四种方法只能进行一层拷贝,即当对象的属性值也是对象时,就无法实现该属性的深拷贝,在这里提供一种利用循环递归进行深拷贝的方法。

var obj = {	name: "123",	sex: { age: "小花" }};var newObj = {};function deepClone(obj, newObj) {	var newObj = newObj || {};	for (let key in obj) {		if (typeof obj[key] == 'object') {			newObj[key] = (obj[key].constructor === Array) ? [] : {}			deepClone(obj[key], newObj[key]);		} else {			newObj[key] = obj[key]		}	}	return newObj;}console.log(deepClone(obj, newObj));//{name: "123",sex: {age: '小花'}}

标签: #js对象复制 #js解构是深拷贝吗 #js对象的拷贝有几种方法 #js解构是深拷贝吗知乎