物件傳什麼?參考 or 值

本篇會談到

  • 傳值( By Value )的『值』是什麼?
  • 傳參考 ( By Reference)的『參考』是什麼?

傳值( By Value )的『值』是什麼?

1. 先來說說『純值』有哪些:

純值可以是 String Number Boolean null undefined Symbol

2. 將上述其中一種純值設定到變數 a

let a = 33; // 將上述其中一種純值設定到變數 = 定義 a 是 33 // 此時 變數 a 知道了這個純值的記憶體位址。

3. 創造一個新的變數 b 並且賦予變數 a

創造一個新的變數,會有一個新的記憶體位置, b = a 就會拷貝 a 純值,放到新建立的 b 記憶體位址上

let a = 33; let b = a; // 傳值把 a 記憶體,複製一份到 b 記憶體 console.log(b); // 33 b = 30; console.log(a, b); // 33 30 // 各自的記憶體位置 不會互相影響

4.此時變完成了傳值 ( By Value )

傳參考 ( By Reference)的『參考』是什麼?

物件陣列函式,都是物件傳參考特性,並不會直接寫值,會建立一個記憶體空間

只修改屬性值的話 就可以用 const 宣告的物件

1.設定變數 a 並且賦予值為物件類型,變數 a 仍然會得到物件的記憶體位址。

const a ={ name: '小明', obj: {}, }

2. b = a ,變數 b 此時不會得到一個新的記憶體位址,而是會改變指向到變數 a 的記憶體位址,並不會創造新的拷貝物件。

const a ={ name: '小明', obj: {}, } // 設定一個變數 a ,物件類型 const b = a; // 將變數 b ,指向到 變數 a 的記憶體空間 // 此時,a b 物件指向相同地方 console.log(a === b); // true b.name = '阿花'; // 現在 a, b 都在相同記憶體位置,所以改變記憶體空間的內容,會整個一起改變 console.log(b); // {name: "阿花", obj: {…}} console.lgo(a); // {name: "阿花", obj: {…}}

提醒 again: 物件陣列函式,都是物件傳參考特性,並不會直接寫值,會建立一個記憶體空間

參考:
JavaScript ES6 Symbol 資料型態

tags: JS

最後,親愛的大家!我需要你的大聲鼓勵 ٩(⚙ᴗ⚙)۶

如果覺得這篇文章對你有幫助,請給我個一個小小的鼓勵 ❤ 讓我知道,這會成為我寫下去很大的動力。
對了,我還有其他文章,如果有興趣也來逛逛吧!
(文章中如有覺得不妥之處、錯誤內容,也可以透過聯絡我,我會儘速改善,感謝!)

☞ YoJanni 珍妮 2021 正在設計轉職前端的路上,希望大家在學習的路上能夠一起成長
☞ 聯絡我