JS 物件的参考特性 DAY59

JS 在将值赋予到变数上时
会有两个特性(Call by value(传值) 与 Call by reference(传参考))

// 传值
var name1 = '皮杰先生';
var name2 = name1;
name2 = '小鸡公主'
console.log(name1 , name2); // 皮杰先生 小鸡公主
// 传参考
// 假设此物件位址为 0x01
var person = {
    name : '皮杰先生',
}

// 传参考 0x01的位址传给 person2
// person2 与 person 皆指向位址为0x01的物件
var person2 = person;

// 这里修改0x01 当然因为 person2 与 person 皆指向位址为0x01的物件 , 所以 person 也会被修改
person2.name = '小鸡公主';
console.log(person , person2); // 小鸡公主 小鸡公主
console.log(person === person2); // true
// 传参考
var person = {
    name : '皮杰先生1',
}
var person2 = person;
person2 = {
    name : '皮杰先生2',
};
console.log(person , person2);

// 两者参考位置不同
console.log(person === person2); // false

我们来看一下比较复杂的例子

物件参考实际运作模式

var a = { x : 1};
var b = a;
a.y = a = { x : 2};
// a = { x : 2} 是一个运算式
// a.y = a = { x : 2} 同时执行
// a.y 找的是原本的参考路径
console.log(a.y);
console.log(b);
console.log(a === b.y);

分解如下
https://ithelp.ithome.com.tw/upload/images/20201020/20123039LdhefwE8hk.jpg

https://ithelp.ithome.com.tw/upload/images/20201020/201230392XoEaDkMvV.jpg

我们再来看一题

var a = { x: 1};
var b = a;
a.x = { x: 2};
a.y = a = { y: 1};
console.log(a); // 结果?
console.log(b); // 结果?

分解如下
https://ithelp.ithome.com.tw/upload/images/20201020/20123039kHUruf2t2n.jpg

https://ithelp.ithome.com.tw/upload/images/20201020/20123039d2WhLlDb5N.jpg

那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷/images/emoticon/emoticon41.gif


<<:  无线网路安全-邪恶的双胞胎(Evil Twin) & 流氓接入点(Rogue Access Point)

>>:  Day39. 建造者模式

[Day 1] - 前言

大家好,我是转职未满一年的工程师,听到友人推荐这项IT界的盛事,今年慕名前来参加IT邦自我挑战连续发...

[SQL] 读 XML 格式文件写入 SQL table

范例 XML 档案格式内容如下,想抓 XML 几个栏位的资料写入 table 中,SQL 语法如下 ...

第二十二天:试写 Gradle Plugin

在使用了 Gradle 这麽多天後,您应该会发现,几乎所有的专案都至少会用到几个 Plugin 来增...

App 测试技能树(二)

-常用单元测试框架 - iOS - OCUnit - GHUnit - XCTest - OCMoc...

Day 22 Todo list

今天将会介绍简易的todo list 功能 新增事项(push将输入值放入阵列) Enter加入资料...