[JavaScript] by reference(傳址)與by value(傳值)的異同

🔍小範例大學問👊

1. 基本定義

  • by value(傳值):傳遞的是「數值的複製」。
  • by reference(傳址):傳遞的是「記憶體的位置。

2. by value(傳值)

let a = 1;
b = a;
console.log(a, b);// 1 1
let b = 2;
console.log(a, b);// 1 2


💬說明:基本型別 (Primitive type),在 Javascript 皆是以by value (傳值) 的方式傳遞。

💡 基本型別:

  1. Number:數字
  2. String:字串
  3. Boolean:布林
  4. Undefined:未定義
  5. Null:空值
  6. Symbol:符號
    =============>MDN資料型別

3. by reference(傳址)

let c = ["前", "中", "後"];
let d = c;
console.log(c);//['前', '中', '後']
console.log(d);//['前', '中', '後']

d[0] = "超前";
console.log(c);//['超前', '中', '後']
console.log(d);//['超前', '中', '後']

d = ["改前", "改中", "改後"];
console.log(c);//['超前', '中', '後']
console.log(d);//['改前', '改中', '改後']


💬說明:物件型別,則會以 by reference (傳址)的方式傳遞。但有例外的情形,如果整個陣列全部異動時,就會新建記憶體位址。

let e = {
    myName:"Peter",
    myAge:20
};
let f = e;
console.log(e);//{myName: 'Peter', myAge: 20}
console.log(f);//{myName: 'Peter', myAge: 20}

f.myAge= 35;
console.log(e);//{myName: 'Peter', myAge: 35}
console.log(f);//{myName: 'Peter', myAge: 35}

f = {
    myHome:"Taipei",
    isSleep:true
};
console.log(e);//{myName: 'Peter', myAge: 35}
console.log(f);//{myHome: 'Taipei', isSleep: true}

💬說明:物件和陣列是相同的結果。

💡 物件型別:

  1. Object:物件
  2. Array:陣列
  3. Function:函式

參考文章

[JavaScript] Javascript中的傳值 by value 與傳址 by reference

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

%d 位部落客按了讚: