Js 浅克隆详解

Posted leolovexx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Js 浅克隆详解相关的知识,希望对你有一定的参考价值。

浅克隆:不仅赋值,而且赋予了内存地址
深度克隆:赋值,内存地址不同

var a = [1,2,3];
var b = a; a = [4,5,6]; alert(b); //[1,2,3]

面试时被问到这样一个问题,竟然从来没试过... 当时直接的理解,数组是引用类型,应该是传递的是引用,so b也是[4,5,6],于是错了。js数组传递是跟基本类型一样创建副本吗?
我又做了如下测试:

var a = [1,2,3];
var b = a;
a.pop();
alert(b);  //[1,2]

这样好像又是引用传递了? 晕了

 

 

 

答案:

a = [4,5,6];//改变的是a引用本身,没有改变数组对象 a.pop();//改变的是数组对象,a引用没有改变。 b = a;//该操作后,b直接指向数组对象,不是b指向a,a再指向数组。 //所以改变a引用并不会对b引用造成影响,改变数组对象可以。

作者:Intopass
链接:https://www.zhihu.com/question/26042362/answer/31903017
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
 
技术分享图片

 











以上是关于Js 浅克隆详解的主要内容,如果未能解决你的问题,请参考以下文章

js浅克隆和深克隆--个人理解

js 递归实现深度克隆与浅克隆

Git 浅克隆

第33题JAVA高级技术-对象克隆2(浅克隆)

java中深克隆与浅克隆的区别

java中的浅克隆和深克隆是啥