javaScript深度拷贝,深度克隆

对于原始类型(Number、String、Boolean、null和undefined)及对象中的函数是可以直接通过“=”复制来实现克隆,而对于对象和数组,需要遍历每个元素,若元素为对象和数组,则继续递归遍历,直到元素为原始类型或函数,则直接通过“=”复制。

function deepClone(obj) {
	let result
	const type = isClass(obj)
	if (type === 'Object') {
		result = {}
	} else if (type === 'Array') {
		result = []
	} else {
		return obj
	}
	
	for(var key in obj) {
		const val = obj[key]
		if(['Object', 'Array'].includes(isClass(val))) {
			// 在严格模式下,禁止使用该种办法
            // result[key] = arguments.callee(val) //递归
            result[key] = deepClone(val)
		} else {
			result[key] = val
		}
	}
	return result
}

//判断对象类型
function isClass(obj) {
	// Object.prototype.toString.call(obj) [object '类型']
	return Object.prototype.toString.call(obj).slice(8, -1)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值