day20: immuable

今天提到 immuable,对於程序当中储存的资料来说,
如果你存的资料可以被更改,那你永远不知道谁改了你的原始资料,
为了避免这种情况发生,我们就必须要有 immuable,
相信写 React 的大家常常会使用到这种方式来避免原始资料被破坏。

譬如我今天有个储存 array 的资料

const array = [1,2,4,6];

array[0] = 2;

console.log(array); // [2,2,4,6]

有发现上面的 array 变数被改变了吗?
从原本 [1,2,4,6] 变成 [2,2,4,6]

那如果有个 object 呢?

const objA = {x:1,y:2,}

objA[x] = 3;

console.log(objA); // {x:3,y:2}

有发现吗?上面的 array 和 obj 都轻易的被更改,
如果是共用变数,那使用的人,改到最後就会不知道哪些地方改到,
进一步让原始资料变的不乾净,解决得方式就是 immutable。

那 immutable 在 javaScript ES6 就提供了好用的方式。
分别是 Spread operator 展开运算子和 Rest operator 其余运算子。

譬如以上的范例,就可以改成以下这样

const array = [1,2,4,6];
const [_,...rest] = array;

const arrayCopy = [3,...rest];

console.log(array); // [2,2,4,6]
console.log(arrayCopy); // [3,2,4,6]
const objA = {x:1,y:2};
const objACopy = {...objA,x:3};

console.log(objA); // {x:1,y:2};
console.log(objACopy); // {x:3,y:2}

发现了吗?这样子改动的 copy 都不会改动到原本的 array 和 object,
就是原本的值不是 call by reference 而只是将原本的值 coby 一份,
给新的变数。所以就不会改动到原本变数里的值。

https://dev.to/mpodlasin/functional-programming-in-js-part-ii-immutability-vanilla-js-immutable-js-and-immer-2ccm


<<:  DAY20:学习率(下)

>>:  30天零负担轻松学会制作APP介面及设计【DAY 26】

愿财力与你同在

不知不觉已经来到最後一天了, 写这系列是临时决定的,每天的库存量都是0,所以有很多文章,我都只挑重点...

Mac OS用FortiClient无法连线

想请问大家现在是否因为Mac OS安全性的关系?还是Forticlient的程序有改? Mac OS...

[Day2]什麽是区块链?

Hi~今天要介绍什麽是区块链!会分成五个部分,分别是定义、起源、特性、优点、缺点! 定义 当你听到...

[想试试看JavaScript ] 事件处理

事件处理 事件处理就是当使用者对画面做了一个动作,我们的程序必须侦测这个动作,并且做出反应。 如果事...

Day 30 透过隧道广播公网IPv4

没错!即将完赛了 那今天就来分享一下透过隧道广播公网IPv4的心得吧! 首先,笔者前几天拿到了一段 ...