JavaScript 的引用賦值與傳值賦值
阿新 • • 發佈:2019-02-08
<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,2
arr1為:1,2,3