Day-14 传值与传址

综合本系列此前的汇整,构成JavaScript资料的基本型别(primitives)是指字串、数字、布林值、null、undefined等「纯值」;而物件型别(object)则是**复数的「纯值」或「物件」**所组成。

基本/物件型别与「传值」

型别比较

基本型别中,判定两个变数是否相等,就是看他的「值」。以数字为例:

var yearMinguo = 1
var yearTaisho = 1

console.log(yearMinguo === yearTaisho); //得出true,字面举例是:民国元年也是大正元年

物件型别中,即使两个变数可能「等值」,但不同的物件就是不同的实体(instance),直接比较不会相等。比如:

var Taiwan = { value: "Takao" };
var Kyoto = { value: "Takao" };

console.log(Taiwan === Kyoto); //得出false,字面举例是:台湾与京都都有一个高雄(Takao),但不等於台湾是京都

传值

如前所述,当我们比较两个基本型别时,是比较其「值」。因此复制、传递时,也只涉及「值」。

当我们们复制变数时,若「值」相同,尚看不出差异:

var yearMinguo = 15
var yearTaisho = yearMinguo

console.log(yearMinguo); //得出15,基於值
console.log(yearTaisho); //得出15,基於yearMinguo的值

但「被引用的变数」变更值之後,引用者的值并不会同步更新:

var yearMinguo = 110

console.log(yearMinguo); //得出110,基於值
console.log(yearTaisho); //得出15,字面举例是:民国110年了,大正仍是15年

这种变数间引用後「值」彼此独立的情形,即为传值(pass by value)

传址

物件型别中,若一样作变数引用,「值」相同也看不出差异:

var Taiwan = { value: "Takao" };
var Kyoto = Taiwan;

console.log(Taiwan); //得出Takao
console.log(Kyoto); //得出Takao

但「被引用的变数」变更值之後,引用者也会一起更新:

var Taiwan = { value: "Kaohsiung" };

console.log(Taiwan); //得出Kaohsiung
console.log(Kyoto); //得出Kaohsiung

因为此时Taiwan、Kyoto两个变数已经成为同一个实体(内台一体了XD)

console.log(Taiwan === Kyoto); //得出true

这种变数间指向「同一实体」的情形,即为传址(pass by reference)

小结

笔者的小口诀:总之「物件会跟着变」。

确实掌握JavaScript「传值」或「传址」的实情,对构筑程序至关重要。惟若「函式中的参数」被「重新赋值」的话,就不受外部变数「传址」规则的影响了。


<<:  [Day 16] Reactive Programming -Reactor(ConnectableFlux)

>>:  Day 30 最後的收尾

[Day25] 找回密码API – views

哈罗大家好,今天要来撰写我们找回密码API的逻辑,先来看看我的程序码吧~~ 程序码 from dat...

顺着藏宝图的指示,可以寻获庞大的财富

Ingress Service是给予User透过特定的Port来访问Pod,当有多个Service连...

JavaScript学习日记 : Day11 - 函数绑定

当object中的function作为callback function传递给setTimeout时...

Day 4. 关於.NET後端(2)

开开始学後端的人多少会听到ASP.NET、.NET Framework、.NET Core,但不清楚...

IOS-App KVO(1)

Day29 1.KVO是什麽? KVO全名:Key-Value Observing(缩写:KVO)。...