比如我有二个对象 一个是A一个是B
我通过 直接 A=B 的方式将B赋给A
但是我发现,我将A对象的属性改了之后,B对应的属性也改了。
使用angular.clone()或者jquery clone之后,就不会有这种问题。
一直很郁闷,是不是对象引用指向了同一处还是怎么,新手求解。
百度:深复制,浅复制
javascript中有两种类型,一种叫做基本数据类型,一种就是引用类型,
基本数据类型有 String Number Boolean undefined null
引用数据类型有 Object Array 等 (Function Regexp)
因为对象是引用类型, 看字面意思,引用 ,引用的一个数据,所以在直接b={},a=b的时候,a指向了b,b指向了对{}的引用,注意,这里b和{}是两个独立的,b指向了{} 。 所以a=b,a也指向了{} ,所以改a.name的时候b.name也改变了,因为他们指向同一个{}
angular.clone()
这个方法的字面意思是 “克隆” 意思指可以从对象b克隆一个{}到对象a
另外还有浅复制和深复制的概念,这是针对对象里的对象,或者对象里的引用类型的,具体你可以百度一下
对象是引用类型,使用 a = b 的时候,这个时候叫取别名,他们两个指向的是同一个内存,