简单的对象拷贝

JavaScript 数据类型

先来回顾一下JavaScript里的数据类型。
基本数据类型:string number undefined boolean null symbol(es6新增);
数据类型之间相互转换:
1,隐式转换 10-‘1’=9
2,强制类型转换 Number(); parseInt(); parseFloat(); String(); Boolean()等等
引用数据类型:统称Object对象,主要包括对象,数组和函数。Array Object Math Function…


地址传递

先看一段代码

var a =10;
var b = a;
b = 20;
console.log(a);//得出结果10
console.log(b);//得出结果20

b被修改后,a并没有被修改。
再来看下一段代码

var c = [1,2,3];
var d = c;
d.push(4);
console.log(d);//得出结果[1,2,3,4]
console.log(c);//得出结果[1,2,3,4]

我们再新的d中添加了一个4,但原来的c也被修改了。

以上就展示了基本数据类型和引用数据类型的区别。
基本数据类型中是值,引用数据类型中对应的是地址。地址被修改后c和d只要引用的是一个地址就以最终修改的为准。

小结一下:
赋值的时候,基本数据类型只是值的赋值,引用数据类型赋值的时候不仅仅是值的赋值,还是引用的传递(地址)。


拷贝对象

var a = {
	name:"张三",
	sex:"男"
}
var b = a;

以上这种,当b被修改,a也会被修改。当再想使用原来的a,就无法使用了,因为已经被修改了。
还是以上的代码。

var a = {
	name:"张三",
	sex:"男"
}
//警告:这里 a 是个对象,并不是键值对数组
function clone(o){
	var obj = {}
	for(attr in a){
		obj[attr] = o[attr];  //attr属性,a[attr]属性值
	}
	return obj;
}
var b = clone(a);
console.log(b);//打印出{name:"张三","男"}

以上,当b被修改,a不会被修改。
实际应用中,会有这种情况。一个网页登陆对象,另一个页面要用这个登陆对象。网页登陆对象会被存储起来,这个登陆对象需要被另一个人使用时,登陆对象被改变,但原有的对象禁止被改变。就要拷贝对象了。


才疏学浅,如有不当之处,特请指正,感激不尽。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值