JS 基礎篇 (7) 傳值或傳址
Javascript 的資料可以分為「基本型別」和「物件型別」
- 基本型別: 資料以純值的形式存在
- 物件型別: 資料以純值或物件組合而成
基本型別的比較
當今天比較兩個基本型別的資料時,比較的是變數的值。
1 | var a = 10; |
物件型別的比較
物件比較的情況下,因為每個js的物件都是個別的實體,在記憶體中存在不同位置。所以即使物件內的value相同,仍是不同物件。
1 | var obj1 = { value: 1 }; |
傳值或傳址
當你在 JavaScript 中傳遞變數給函數作為參數或將變數賦值給另一個變數時,你實際上是在處理該變數的值。這就涉及到 JavaScript 中的「傳值」和「傳址」的概念。
- 傳值(Pass by Value):
當你將一個基本型別的變數(例如數字、字串、布林值等)傳遞給函數或賦值給另一個變數時,JavaScript 會將該變數的值複製一份,然後將這份複製的值傳遞給函數或賦值給另一個變數。在函數內部修改這個複製的值或新變數不會影響原始變數的值。
1 | let num1 = 5; |
- 傳址(Pass by Reference)
當你將一個物件(包括陣列、函數等)傳遞給函數或賦值給另一個變數時,JavaScript 會將該物件在記憶體中的位置(記憶體參考)傳遞給函數或另一個變數,而不是將物件的值複製一份。因此,在函數內部修改這個物件或新變數會影響到原始物件。
1 | let obj1 = { value: 10 }; |
- 例外情形:
當物件被傳遞給函式作為參數或賦值給另一個變數後,此時若不是修改物件而是重新將物件賦值時,不會影響原來的物件。
1 | let obj1 = { value: 10 }; |