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

你可能感兴趣的:(js记录)