js数组赋值:不修改原数组,返回新的数组 。

有一个数组arr = [1, 2, 3, 4, 10]
var str = new Array;

str = arr;//这个不是赋值,将数组arr的引用赋给str,所以改变str也会改变arr (js实际创建的str是一个对象);


正确赋值:
1、str = [].concat(arr);
content用于连接多个数组:arr1.concat(arr2,arr3,。。。。)

2、str=arr.slice(0);
返回一个新数组,从0到最后。
(slice有两个参数:xx.slice(start,end),返回数组xx下标从start到end的元素。若未定义end则返回start到结尾。)

另外:多层数组可以用深拷贝

arr = [{a:1},{a:2}];
arr2 = {name: "name", age:12};
arr3 = [1,2,3,[1,2,[1,2,3]],4,5];
result = JSON.parse(JSON.stringify(arr))

原因解析:

javascript在运行过程中,数据存储分三种:代码空间、栈空间、堆空间。
原始类型的数据值会直接保存在 “栈” 中,数组对象存储到 ”堆“ 中的,然后将地址返回存储到变量中,所以直接用“=”赋值的话,复制的是引用地址,都指向同一个数组对象。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值