210421.Today Iラーニング(TIL):不変性と操作性(+オリジナルとリファレンス)
Javascriptで参照データ型を処理する場合、想像以上に可変メソッドと可変メソッドを区別する必要があることがわかりますので、javascriptでのデータの可変性と不変性をまとめてみましょう.
その前に、元データ(元データ)と参考データ(参考データ)を整理しておきます.
1)元データ型(元データ)オブジェクトではなく、メソッドを持たない6種類のタイプ->文字列、数字、bigint、boolean、null、undefined、シンボル 各変数は、1つのデータ のみを含む.変数を宣言すると、変数名とデータは「stack」という名前の記憶領域に格納されます. 元データ型は、データのコピー時にデータをコピーするので、変更コピーは元データ(可変) に影響しません.
2)参照データ型(参照タイプデータ)配列、オブジェクト、関数など 1変数は、複数のデータ を含む.は「heap」という空間にデータの内容を格納、「heap」のアドレスを「stack」の に格納する.データを呼び出す場合は、「スタック」に格納されているアドレスを参照して、「スタック」で を検索して返してください.参照データは、データ自体ではなく、データをコピーする際にデータのアドレスをコピーするので、レプリカデータの変更は に影響する(可変)
1)浅いコピー(浅いコピー)コピー元データのアドレス値 コピーデータは、元のデータと同じアドレス値 を参照する.コピーデータを変更すると、元のデータが同時に変更されます(影響を受けます).
--> mutable 2)ディープコピー(deepcopy)
データ値自体のコピー
コピーデータ参照が元のデータのアドレス値と異なる(元のデータの参照から完全に切断された)
レプリカデータを変更しても元のデータには影響しません
--> immutable
▼▼変わらない方法
.slice
.pop
その前に、元データ(元データ)と参考データ(参考データ)を整理しておきます.
1)元データ型(元データ)
2)参照データ型(参照タイプデータ)
1)浅いコピー(浅いコピー)
--> mutable
データ値自体のコピー
コピーデータ参照が元のデータのアドレス値と異なる(元のデータの参照から完全に切断された)
レプリカデータを変更しても元のデータには影響しません
--> immutable
.slice
let a = [1,2,3];
b = a.slice();
b[1] = 0;
console.log(b) = [1, 0, 3];
console.log(a) = [1, 2, 3];
▼▼可変方法.pop
a.pop();
console.log(a) = [1, 2];
.pushlet d = [4, 5, 6];
d.push(7);
console.log(d) = [4, 5, 6, 7];
.shiftlet e = [7, 8, 9];
e.shift();
console.log(e) = [8, 9];
.unshiftlet f = [10, 11, 12];
f.unshift(9);
console.log(f) = [9, 10, 11, 12];
Reference
この問題について(210421.Today Iラーニング(TIL):不変性と操作性(+オリジナルとリファレンス)), 我々は、より多くの情報をここで見つけました https://velog.io/@elma98/TILToday-I-Learned-Immutability와-Mutabilityテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol