一个数组赋值给另一个数组。修改这个数组会改变原来的数组里的内容。深拷贝和浅拷贝

这里涉及到了数组的深拷贝和浅拷贝。

浅拷贝,两个数组会相互影响

var arr1=[1];

var arr2=arr1;

arr2[1]=2;

console.log(arr1);// [1, 2]

console.log(arr2);// [1, 2]


上面的例子中。我只是改变了arr2里面的值。但是arr1的值竟然也随之改变了。

 

想要实现arr2的值改变不影响arr1就得进行深拷贝。切断两个数组之间的关联。使用扩展运算符...进行复制。或者是用concat或者slice赋值。

使用扩展运算符需要es6语法的支持。

var a = ['1','2','3']
var b = [...a];

b[3]="4";

console.log(b);//["1", "2", "3", "4"]

console.log(a);//["1", "2", "3"]

b的改变不会影响a

 

var arr1=[1];

var arr2=arr1.concat([]);//或者是var arr2=arr1.slice()

//上面的情况深拷贝以后。arr2==arr1.是true。也可以使用var arr4=arr1.concat();arr4也深拷贝了arr1.并且arr1!=arr4不改变原来数组的情况下,拷贝出数组 b ,且满足 b!=a。使用concat()

arr2[1]=3;

console.log(arr1);//[1]

console.log(arr2);//[1, 3]

 

sort()对数组进行排序也会影响到原来的数组。即使你只用在判断里面

var  arr1=[3,1];

var  arr2=[1,3];

if(arr1.sort().toString()==arr2.sort().toString()){

console.log("00000")

}

console.log(arr1);//[1, 3]

console.log(arr2);//[1, 3]

发现即使你用了sort判断也会改变原来的数组的顺序的。

 

 

Object.assign()拷贝

当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。

 

jq的$.extend([true/false],目标对,拷贝的对象)-  true的话是深拷贝,false浅拷贝会改变原来的值

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值