Mutable object 属於传址型资料,
在 JavaScript 中又被称为「参考型别」,
特色是以「键/值」(key/value)方式存取内容。
这种物件的值实际是指向一个「参考」,
因此在存取 Mutable object 时,
返回的其实是一个参考位址,
参考指向的记忆体位置才是真正的值,
因此称为「传址」。
如果某个变数储存的是 Mutable object,
则当我们改变它的值时,
参考本身并没有变动,
而是参考里面指向的真正的值,
其储存位址里的内容被改变了。
对程序来说物件还是同个物件,
内容却已经不一样了,
因此被称为「可变物件」。
Immutable object 属於传值型的资料,
在 JavaScript 中又被称为「原始型别」。
Immutable object 本身
就是一个无法变动的纯粹的值,
如果变数内储存的是 Immutable object,
当变数重新赋值时,
原本的 Immutable object 会直接被废弃,
用新的值去取代它。
原本的值和後来的值是完全独立的关系,
Immutable object 只会产生和消失,
不会发生改变,因此称为「不可变物件」
let stringA = "This is a string";
let stringB = stringA;
stringA = "The string has changed";
console.log(stringA); //The string has changed
console.log(stringB); //This is a string
console.log(stringA === stringB); //false
简单来说,想要改动 Immutable 物件时,
同个记忆体位置的旧值会被新值取代;
而改变 Mutable 物件时,
记忆体还是一样的「参考」,
而参考指向的值内容其实已经不一样了。
Immutable 在建立实体之後无法改变,
因此内容是单纯、可预期的,
不会发生对相同的资料进行操作
而造成非预期的行为。
JavaScript 的参考型别则就属於 Mutable,
在操作时某个变数的内容
常常会非预期地被改变了却没有察觉。
Immutable objects 在读取和储存时也更有效率,
但在改变 values 时因为是重新创造一个 object,
代价则会相较 mutable objects 要来得多。
>>: 【设计+切版30天实作】|Day23 - Pros区块 - 看似无边框的三栏式卡片,到底要对准哪条栏位?
今天分享程序码从github更新到replit的步骤还有要注意的点 步骤 replit有自带储存环境...
伪类和伪元素皆是从 DOM tree 抽象出来的概念, 用以修饰实际上不在 DOM tree 上的部...
连续 30 天不中断每天上传一支教学影片,教你如何用 React 加上 Firebase 打造社群...
某人可能会迟到,但从不缺席 (没x 失踪很久了好吗== 故事原点 在正式参加铁人赛之前,我从不知道...
前言 接下来几天将以JS实作练习为主,提供制作方式的笔记,透过拆分各个项目的说明,能够了解如何实现每...