综合本系列此前的汇整,构成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)
哈罗大家好,今天要来撰写我们找回密码API的逻辑,先来看看我的程序码吧~~ 程序码 from dat...
Ingress Service是给予User透过特定的Port来访问Pod,当有多个Service连...
当object中的function作为callback function传递给setTimeout时...
开开始学後端的人多少会听到ASP.NET、.NET Framework、.NET Core,但不清楚...
Day29 1.KVO是什麽? KVO全名:Key-Value Observing(缩写:KVO)。...