[Day15] 传值或传址(下)

承上篇

基本型别(primitive):资料以纯值的形式存在。
物件型别(object):可能由零或多种不同型别(含纯值与物件)所组成的物件。--008

// 比较物件型别
var obj1 = { value: 10 };
var obj2 = { value: 10 };
console.log(obj1 === obj2); // false

因两个物件各别宣告,型别的记忆体位置不同,所以是 false 的结果。

变数的更新与传递(物件型别)

举例如下,在物件型别中复制变数,复制的是他的位址,也就是所谓的传址

let obj1 = { value: 10 };
let obj2 = obj1;
console.log(obj1 === obj2); // true

这部分与基本型别不一样,为什麽是 true?我们画来瞧瞧,实际上 obj2 复制了 obj1 的值,而这个值是 Heap 的位址,再来才是他的值。

那如果修改他的值会有什麽结果呢?

obj1.value = 30;

console.log(obj1); // 30
console.log(obj2); // 30

猜到了吗?因为指向同一个 Heap,所以修改 obj1.value 後,obj1 跟 obj2 的结果也同时被影响。

参考资料

JavaScript’s Memory Model
008天重新认识JavaScript


<<:  Day 15: Structural patterns - Facade

>>:  #15 ARIMA教学

DAY11-JAVA的类别(5)

在建构元中也有所谓公有(public)和私有(private)之分。截至目前为止,所提到的都是公有(...

在Mac/Windows上将MOV转换为MP4:实用工具推荐

怎麽在Mac/Windows上将MOV转换为MP4:免费或在线转换器推荐 MOV是Mac用户的流行影...

Day15: 【TypeScript 学起来】Interface VS Type Aliases 用法与差别

上一篇讲到 interface,今天这篇会来讲 type, 他们两个功能几乎很像,但还是有些不一样...

【把玩Azure DevOps】Day17 CI/CD从这里:Pipeline设定Schedule,每日晚上排程执行

现在有不少的软件会有一个特殊的版本叫Nightly,从字面上的意思就可以得知是指每个晚上发行的版本,...

Day 11 - React: Component

关於 Separation of concerns(SoC)这个地方我觉得别人写的已经很清楚了(英文...