物件傳值 與 物件傳參考


Posted by hoyi-23 on 2021-06-22

小試身手(一):

var person = 'Andy';
var person2 = person;
person2 = 'Betty';
console.log(person,person2);

答案是甚麼?

console.log(person,person2);
// Andy , Betty

小試身手(二):

var person = {
    name: 'Andy'
}
var person2 = person;
person2.name = 'Betty';
console.log(person,person2);

答案是甚麼?

console.log(person,person2);
// {name: 'Betty'} , {name: 'Betty'}

物件實字 - 後面內容修改時,前面也會影響
這是一個物件傳參考的特性!!


物件傳參考的特性

什麼傳參考?

JavaScipt在賦予一個值在變數上時,會有兩個特性:

  1. 傳值
  2. 傳參考

純值的部分是透過傳值來做傳遞,純值包括 Srting、Boolean、Number、Undefined、Null

小試身手(一)就是以字串傳遞為傳值方式,
傳值的特性就是 :
傳過去後不會有關聯


而物件型別、函式、陣列等是透過傳參數。
小試身手(二)是屬於物件型別屬於傳參數的方式。

var person = {
    name: 'Andy'
}
var person2 = person;
person2.name = 'Betty';
console.log(person,person2);

當定義了person 的物件,這個次件就在記憶體用了一個空間成為參數,當person2=person時,person拉了同一個參數給過來,所以當person2改變物件的內容時,person也一起改變,因為這兩個傳進去的是同一個參數。


但若今天person2是更改為一個新的物件,如下:

var person = {
    name: 'Andy'
}
var person2 = person;
person2 = {};
console.log(person,person2);
// // {name: 'Betty'} , {}

這時候因為person2已經指向另一個參數,所以person不會改變。


小試身手(三)

var person = {
    name: 'Andy'
}
var person2 = person;
person2 = {
    name: 'Andy'
}
console.log(person,person2);
console.log(person === person2);
// {name: 'Andy'} , {name: 'Andy'}
// false

false的原因是,person2是在指向了一個新的參數。


#物件傳值 #物件傳參考







Related Posts

fs_cli後台指令集

fs_cli後台指令集

耦合過多的缺點

耦合過多的缺點

JS30 Day 15 筆記

JS30 Day 15 筆記


Comments