我的学习之路-javaScript克隆

javaScript 深克隆和浅克隆

前言

当我们需要操作一个javaScript对象,但不希望改变原对象时,就需要对对象进行克隆


一、一些要点

为什么不能直接用" = "赋值来克隆,比如:var obj1 = obj,这就得了解javaScript的数据类型了。

举例用 = 传值时用 == 比较时
基本类型number、字符串、boolean、undefined、null、symbol内存中产生新的副本比较值是否相等
引用类型对象、数组、函数内存中不产生新的副本,而是让新变量指向同一个对象比较内存地址是否相同,即比较是否为同一对象

所以,当对对象用 = 赋值时,其实只是引用它的地址,还是对原来的对象进行操作。

二、浅克隆

基本类型直接克隆,引用类型引用原来的地址。

克隆方法:使用for…in…循环,遍历属性,赋值克隆。

 var obj1 = {
 	a:1;
 	b:2;
 	c:[1,2,3]
 };
 var obj2 = {};
 for(var o in obj1){
 	obj2[o] = obj1[o];
 };

三、深克隆

基本类型和引用类型都克隆,使用递归,判断类型。

function clone(obj){
// 必须先判断是否为数组,因为数组也是对象
	if(Array.isArray(obj)){
		var result  = [];
		for(var i = 0;i < obj.length;i++){
			result.push(clone(obj[i]));
		}
	}else if(typeof obj == 'object'){
		var result = {};
		for(var k in obj){
			result[k] = clone(obj[k]);
		}
	}else{
		var result = obj;
	}
	return result;
}

结语

理解有误的话,希望大家及时指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值