将数组赋给另外一个数组:
var nums=[];
for(var i=0;i<10;++i){
nums[i]=i
};
var samenums=nums;
var samenums=nums;
console.log(nums===samenums)
这里发现samenums和nums是一样的。
当吧一个数组赋给另外一个数组时,只是为新数组增加了一个引用。当通过原引用修改了数组的值,另外数组也会发生变化;
请看以下例子:
nums[0]=100;
console.log(nums,samenums,nums===samenums)
此时会输出:
[ 100, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 100, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] true
这种引用称为浅复制;如何深度复制呢?这里写一个copy函数
function copy(arr1,arr2){
for(var key in arr1){
arr2[key]=arr1[key]
}
}
然后运行以下代码:
var diffnums=[];
copy(nums,diffnums);
console.log(nums,diffnums)
得到结果:
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
如果改变nums,
var diffnums=[];
copy(nums,diffnums);
nums[0]=100;
console.log(nums,diffnums);
得到以下结果:
[ 100, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]