js 把一個對象賦值給另一個對象會指向同一個內存地址


先看一段代碼:

    var arr1 = [1,2,3];
    var arr2 = arr1;
    arr2.push(4);
    console.log(arr1)//[1,2,3,4]

為什么會輸出 的是[1,2,3,4]而不是[1,2,3]。

因為實際上並不是新建一個和原對象(數組也是對象)完全一樣的對象,而是把原對象的內存地址直接復制給了另一個對象,也就是說兩個對象都是指向同一個內存地址,所以實際上它們就是同一個對象。arr2更改的同時就是更改了arr1。好似你的鑰匙(arr1)復制了一把(arr2)給別人,你可以把房門打開,別人那把也可以。你更改了房子(內存)里面的東西,別人打開也是看到你更改了的那個樣子。

所以上面想分開只想操作arr2又不影響arr1,可以寫為

    var arr1 = [1,2,3];
    var arr2 = [].concat(arr1);
    arr2.push(4);
    console.log(arr1)//[1,2,3]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM