vue深拷贝的几种实现方式

1、通过递归方式实现深拷贝

比较全面的深拷贝,缺点是较为繁琐

javascript 复制代码
function deepClone(obj) {
	var target = {};
	for (var key in obj) {
		if (Object.prototype.hasOwnProperty.call(obj, key)) {
			if (typeof obj[key] === 'object') {
				target[key] = deepClone(obj[key]);
			} else {
				target[key] = obj[key];
			}
		}
	}
	return target;
}

2、JSON.parse(JSON.stringify(obj))

满足一般使用场景,但无法实现对象中方法(function)的深拷贝

javascript 复制代码
let obj = {
	id: 1,
	name: '张三',
	age: 10,
}
let newObj = JSON.parse(JSON.stringify(obj))

3、jQuery的extend方法实现深拷贝

javascript 复制代码
var array = [1,2,3,4];
var newArray = $.extend(true,[],array); // true为深拷贝,false为浅拷贝

4、Object.assign(obj1, obj2)

只有一级属性为深拷贝,二级属性后就是浅拷贝

javascript 复制代码
let obj = {
	id: 1,
	name: '张三',
	age: 10,
}
let newObj = Object.assign({}, obj)

5、扩展运算符

只有一级属性为深拷贝,二级属性后就是浅拷贝

javascript 复制代码
var obj = {
    a: 1,
    b: 2
}
 
var obj1 = {...obj}

6、数组使用数组方法进行深拷贝(concat、slice)

只有一级属性为深拷贝,二级属性后就是浅拷贝,如[1,2,3,[1,2,3]]

javascript 复制代码
var arr1 = [1, 2, 3, 4]
var arr2 = arr1.concat()
var arr3 = arr1.slice(1)

7、使用Vue提供的观察者模式实现数组深度复制

//需要复制的数组

javascript 复制代码
let arr1 = [{name: "小明", age: 18}, {name: "小芳", age: 20}];
let arr2 = Vue.util.extend([], arr1);

8、使用ES6提供的扩展运算符实现数组深度复制

javascript 复制代码
//需要复制的数组
let arr1 = [{name: "小明", age: 18}, {name: "小芳", age: 20}];
//使用ES6的扩展运算符实现数组深度复制
let arr2 = [...arr1];
相关推荐
Surmon34 分钟前
彻底搞懂大模型 Temperature、Top-p、Top-k 的区别!
前端·人工智能
木斯佳3 小时前
前端八股文面经大全:bilibili生态技术方向二面 (2026-03-25)·面经深度解析
前端·ai·ssd·sse·rag
不会写DN3 小时前
Gin 日志体系详解
前端·javascript·gin
冬夜戏雪3 小时前
实习面经记录(十)
java·前端·javascript
爱学习的程序媛5 小时前
【Web前端】JavaScript设计模式全解析
前端·javascript·设计模式·web
小码哥_常5 小时前
从SharedPreferences到DataStore:Android存储进化之路
前端
老黑5 小时前
开源工具 AIDA:给 AI 辅助开发加一个数据采集层,让 AI 从错误中自动学习(Glama 3A 认证)
前端·react.js·ai·nodejs·cursor·vibe coding·claude code
薛先生_0995 小时前
js学习语法第一天
开发语言·javascript·学习
jessecyj5 小时前
Spring boot整合quartz方法
java·前端·spring boot
苦瓜小生5 小时前
【前端】|【js手撕】经典高频面试题:手写实现function.call、apply、bind
java·前端·javascript