JS 03 - 资料传递

大家好!

昨天的储存容量和储存装置,有没有更容易理解原始型别和物件型别的差异呢?
我们进入今天的主题吧!


传递行为

记得昨天有强调一句话吗?

原始型别和物件型别的传递方式不同

没错,今天的主题就是这个!
至於什麽是资料的传递呢?举例一下:

var a = 'str',
    b = a;
a === b; // true

上方都有进行资料的传递。
也就是说,只要有出现资料,就会有传递的行为

然而,不同的资料型别也有不同的传递方式,举例一下:

('s' + 't' + 'r') === 'str'; // true
new String('s' + 't' + 'r') === new String('str'); // false

接下来我们就来理解传递方式的差异吧!


传递方式

JavaScript 只有原始型别和物件型别,因此也就只有 2 种不同的传递方式。
昨天我们提到:

前者(原始型别)建立的会是纯值,後者(物件型别)建立的则是物件

既然原始型别是纯值,那麽也就只能传递纯值;同理,物件型别就是传递物件。

原始型别

var c = 5,
    d = c;
c === d; // true
c = c ** 2; // 25
c; // 25
d; // 5
c === d; // false

cd 传递的只有纯值,因此 d = c 实际上就是 d = 5
这也是为什麽,当 c 被平方时,d 没有被影响的原因。

物件型别

var e = [],
    f = e;
e === f; // true
e.push(0); // 1
e; // [0]
f; // [0]
e === f; // true

ef 传递的就是物件,因此 f 会指向 e 在记忆体中的位置。换句话说,f 实际上就是 e
这也是为什麽,当 e 推入 0 时,f 也会有 0 的原因。


有一次我不小心用回圈无限宣告变数,导致记忆体近乎直线上升,最後只好无奈地将电脑强制关机。
但是,因为这次惨痛的经验,也就理解了原理,毕竟如果每次 f = e 都是再建立一个新的物件,那麽现在的浏览器可能就不会有分页的功能了。

差不多也到尾声了。
如果对文章有任何疑问,欢迎於下方提问和建议!
我是 Felix,我们明天再见!


<<:  Day03:认识MVT

>>:  LeetCode解题 Day18

计算资源及资料的设定02

建立了计算资源後,接下来要建立及处理有关资料的部分。 在Microsoft Azure Machin...

追求JS小姊姊系列 Day10 -- 如果时间能重来,我不想跟工具人聊天(下)

前情提要 在D特的帮助下,试着穿越时空,但时间碎片凑齐了却还是出不去,现在该怎办? 我:...所以我...

Day 08 CSS <文本属性>

CSS Text 属性可定义文本的外观 例如 : 文本的颜色、对齐文本、装饰文本、文本缩进、行间距 ...

Day23. 在讲表单之前,先来谈谈routes和mvc - 表单 part1

在讲解基本的表单架构以前,我们先将基本的CRUD建立起来。 以下的前情提要会提到有关mvc &...

分散式链路追踪 - Jaeger

在 OpenTelemetry 中有提到 trace 的概念。而 Trace 由多个 Span 组成...