引用型別改變值的問題

2021-08-19 14:53:00 字數 989 閱讀 3171

var arr1 = "marry".split('');

var arr2 = arr1.reverse();

var arr3 = "blues".split('');

arr2.push(arr3);

console.log(arr1);//[ 'y', 'r', 'r', 'a', 'm', [ 'b', 'l', 'u', 'e', 's' ] ]

console.log(arr2);//[ 'y', 'r', 'r', 'a', 'm', [ 'b', 'l', 'u', 'e', 's' ] ]

console.log(arr1.slice(-1));//['b','l','u','e','s']

arr1和變數arr2指向堆上的同一塊記憶體區域,無論是通過arr1還是arr2的引用改變了堆上變數的值,最終兩個變數所指向的引用的值都會發生改變。

slice方法

是對array中的一段做淺複製。首先複製array[star],一直複製到array[end]為止。end的引數是可選的。預設是該陣列的長度。如果引數中的任何乙個是負數,array.length會和他們相加,試圖讓他們變成非負數。如果start大於等於array.length,得到的結果將是乙個新的空陣列。

splice(start,deletecount,item..)

splice方法從陣列中移除乙個或者多個元素,並用新的的item替換他們。引數start是從陣列array中移除元素的開始位置。引數deletecount是要移除的元素的個數。如果有額外的引數 ,那些item會被插入到被移除的元素的位置上。它返回乙個被移除元素的陣列。

var a = ['a','b','c'];

var r = a.splice(1,1,'ache','bug');

console.log(a);//['a','ache','bug','c']

console.log(r);//['b']

值型別 引用型別

在 c 中有兩種型別的資料,一種是值型別資料,一種是引用型別資料。在編碼的時候區分這兩種型別資料,可以避免一些細小的編碼錯誤。首先說說什麼型別是值型別,例如 int float bool之類的基礎型別,以及用struct定義的型別,如 datetime。除此外,如string,陣列,以及用class...

值型別 引用型別

值型別當乙個值型別賦值給另乙個值型別的時候,預設情況下完成的是乙個成員到另乙個成員的複製。引用型別 引用型別分配在託管堆上。其物件一直保留在記憶體中,直到.net垃圾 器將它們銷毀。預設情況下,乙個引用型別的賦值將new出乙個對該堆上同乙個物件的新引用 new關鍵字返回的是乙個指向堆上物件的引用,而...

值型別和引用型別的傳參問題

關於值型別和引用型別已經寫了兩篇部落格,之前大多都是理論階段,今兒就舉個栗子來看看他們兩種資料型別在傳遞引數方面到底有什麼不同的地方。今天的開場白還真的挺開門見山的哈 首先建立乙個person的類,有姓名 年齡 樣貌三個屬性 public class person public int age pu...