大家好!
昨天的储存容量和储存装置,有没有更容易理解原始型别和物件型别的差异呢?
我们进入今天的主题吧!
记得昨天有强调一句话吗?
原始型别和物件型别的传递方式不同!
没错,今天的主题就是这个!
至於什麽是资料的传递呢?举例一下:
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
c
和 d
传递的只有纯值,因此 d = c
实际上就是 d = 5
。
这也是为什麽,当 c
被平方时,d
没有被影响的原因。
var e = [],
f = e;
e === f; // true
e.push(0); // 1
e; // [0]
f; // [0]
e === f; // true
e
和 f
传递的就是物件,因此 f
会指向 e
在记忆体中的位置。换句话说,f
实际上就是 e
。
这也是为什麽,当 e
推入 0
时,f
也会有 0
的原因。
有一次我不小心用回圈无限宣告变数,导致记忆体近乎直线上升,最後只好无奈地将电脑强制关机。
但是,因为这次惨痛的经验,也就理解了原理,毕竟如果每次 f = e
都是再建立一个新的物件,那麽现在的浏览器可能就不会有分页的功能了。
差不多也到尾声了。
如果对文章有任何疑问,欢迎於下方提问和建议!
我是 Felix,我们明天再见!
建立了计算资源後,接下来要建立及处理有关资料的部分。 在Microsoft Azure Machin...
前情提要 在D特的帮助下,试着穿越时空,但时间碎片凑齐了却还是出不去,现在该怎办? 我:...所以我...
CSS Text 属性可定义文本的外观 例如 : 文本的颜色、对齐文本、装饰文本、文本缩进、行间距 ...
在讲解基本的表单架构以前,我们先将基本的CRUD建立起来。 以下的前情提要会提到有关mvc &...
在 OpenTelemetry 中有提到 trace 的概念。而 Trace 由多个 Span 组成...