<script> var arr1=[1,2]; var arr2=arr1; arr2.push(3); console.log('arr1为:'+arr1); console.log('arr2为:'+arr2); var a=2; var b=a; b+=2; console.log('a为:'+a); console.log('b为:'+b); </script>
输出结果为:
arr1为:1,2,3
arr2为:1,2,3
a为:2
b为:4
为什么arr1和arr2会相同,而a和b又不同呢?
原因是:
number,string类型都是基本类型,而基本类型存放在栈区,访问时按值访问,赋值是按照普通方式赋值;
对象和数组是通过引用来赋值的,所以改变arr1的同时arr2也会跟着改变;
那如何避免上述数组引用赋值的情况呢?
可以采用如下方法:
//数组(循环赋值) var arr3=[]; for(var i=0;i<arr1.length;i++){ arr3[i]=arr1[i]; } arr1.push(3); console.log('arr3为:'+arr3); console.log('arr1为:'+arr1);结果为:arr3为:1,2arr1为:1,2,3