1. 程式人生 > >JavaScript 的引用賦值與傳值賦值

JavaScript 的引用賦值與傳值賦值

<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