TIL. データ型を勉強しましょう.
11035 ワード
Core JavaScriptを読み、学習の部分を整理します.
基本型:数値、文字列、ブール値、null、undefined、シンボル 参照:オブジェクト、配列、関数、日付、正規表現
=>通常、
🧐 どちらもコピーを行いますが、違いがあります.基本タイプでは、値を含むポップアップ値を直接コピーできますが、参照タイプでは、値を含むポップアップ値からなるセットのポップアップ値をコピーします.
基本型は1回の湧出値をコピーするだけで,参照型はもう1段階を経る必要がある.
基本型は
パソコンはすべてのデータを0か1に変えて記憶します.0または1のみを表すメモリフラグメントは
メモリは複数のビットで構成され、各ビットは
複数のビットを組み合わせると、検索時間を短縮し、表示可能なデータ数を増やすことができます.こうして
JAvascriptは、メモリ管理の圧力から相対的に解放されているため、64ビット、すなわち8バイトのより大きなメモリ領域が割り当てられています.
¥¥すべてのデータはバイト単位の識別子であり、より正確にはメモリオーバーフロー値で互いに区別し接続することができる.
🧐JavaScriptのメモリ管理について説明しましょう.
=>javascriptオブジェクトの作成時にメモリを自動的に割り当て、役に立たないときにメモリを自動的に解放します(ゴミ収集:自動メモリ管理方法)
メモリの生存サイクルを見てみましょう.必要に応じて2を割り当てます.3を使います.いらないなら解除する
変数:変更可能なデータ、変更可能なデータのスペースまたはコンテナ
=>変数が値を格納する場所(値が存在するメモリのアドレス). 識別子:データを識別するための名前: メモリに値を格納するには、まずメモリに保持すべきメモリのサイズを知る必要があります.これは、異なる値タイプ(データ型)が異なるメモリサイズを確保する必要があるためです.
変数領域メモリ:変数と定数を区別する可変ターゲット データ領域メモリ:不変性を区別する場合の可変ターゲット
基本データが不変の場合、参照データは可変値である必要があります.ただし、基本的な性質は通常可変値ですが、設定に従って変更することはできません.
📍 基本データと参照データの最大の違い
基本型コピー値、参照型コピーから値が出ます.ただし、どのデータ型でも、変数に割り当てるために浮動値をコピーする必要があります.
厳密には、JavaScriptのすべてのデータ型は
参照型データの
どのような場合にオブジェクトを変更する必要がありますか?値として渡されるオブジェクトを変更しても、元のオブジェクトは変更されない場合があります.この場合、不変のオブジェクトが必要です.
🧐 JavaScriptからオブジェクトをコピーする方法
浅いレプリケーションは、次のステップの値のみをコピーします.オブジェクトを含む変数を別の変数に割り当てると、データコピーではなく参照が生成されます.したがって、1つの変数のデータを変更すると、他の変数のデータも変更されます. (つまり、コピーを作成するのではなくコピーを作成するふりをする)
深度コピーは、内部のすべての値を検索してコピーする方法です.の浅いコピーのように、データを共有するのではなく、同じ構造のオブジェクトを作成する場合は、深いコピーの概念が使用されます.
Object.assign()
オブジェクト形式のデータのマージを容易にする関数
展開演算子
展開演算子の深度コピーを使用するには、次の方法を使用します.
ふかほうしゃトラップ
🧐完璧な深度レプリケーションを行うにはどうすればいいですか?
1)深度コピーを再帰的に実行!
-->ただし、深くコピーするシェイプに基づいて、再帰関数を作成してコピーします.面倒くさいこと.
2)JSON.parse()とJSON.stringgify()関数の使用
-->JSON.stringify関数を使用してオブジェクト全体を文字列に変換し、JSONを再開します.parse関数を使用して文字列をオブジェクトに変換します.
👉 詳細については、「深い関数」、「浅い関数」セクション:https://helloinyong.tistory.com/267を参照してください.
未定義:1)ユーザーが明示的に指定した場合
=>これ自体が値です.Undefinedは空を意味するが、値として存在するため、propertyまたは配列内の要素には固有のキー値が存在する.(実績データ)
2)値が存在しない場合、JavaScriptエンジンにより自動的に値が割り当てられます.
=>この場合、構成または配列のキー値(インデックス)自体は存在しません.(値なし)
null
空を明示的に表す場合は、undefinedではなくnullを使用します.
📍データ型のタイプ
=>通常、
기본형
は、割り当てまたは演算時にコピーされ、참조형
は参照される.🧐 どちらもコピーを行いますが、違いがあります.基本タイプでは、値を含むポップアップ値を直接コピーできますが、参照タイプでは、値を含むポップアップ値からなるセットのポップアップ値をコピーします.
基本型は
불변성
です.この不変性を理解するには、メモリとデータについて一定の理解が必要です.メモリとデータを見てみましょう.📍メモリとデータ
パソコンはすべてのデータを0か1に変えて記憶します.0または1のみを表すメモリフラグメントは
비트
と呼ばれます.メモリは複数のビットで構成され、各ビットは
고유한 식별자
で位置決めできます.複数のビットを組み合わせると、検索時間を短縮し、表示可能なデータ数を増やすことができます.こうして
바이트
という単位が生まれた.1バイトは8ビットからなる.JAvascriptは、メモリ管理の圧力から相対的に解放されているため、64ビット、すなわち8バイトのより大きなメモリ領域が割り当てられています.
¥¥すべてのデータはバイト単位の識別子であり、より正確にはメモリオーバーフロー値で互いに区別し接続することができる.
🧐JavaScriptのメモリ管理について説明しましょう.
=>javascriptオブジェクトの作成時にメモリを自動的に割り当て、役に立たないときにメモリを自動的に解放します(ゴミ収集:自動メモリ管理方法)
メモリの生存サイクルを見てみましょう.必要に応じて2を割り当てます.3を使います.いらないなら解除する
📍識別子と変数
=>変数が値を格納する場所(値が存在するメモリのアドレス).
변수명
📍不変値
📍 可変値
基本データが不変の場合、参照データは可変値である必要があります.ただし、基本的な性質は通常可変値ですが、設定に従って変更することはできません.
📍 基本データと参照データの最大の違い
基本型コピー値、参照型コピーから値が出ます.ただし、どのデータ型でも、変数に割り当てるために浮動値をコピーする必要があります.
厳密には、JavaScriptのすべてのデータ型は
참조형 데이터
にすぎません.ただし,基本型では湧出値のコピーは1回のみ行われ,参照型ではさらに1段階が経過する.ex) let a=1
// a는 그냥 a 입력하면 접근이 가능하다.
let b=[1,2,3]
//b는 data에 접근하려면 index로 한번 더 들어가서 접근해야 값을 얻을 수 있다(2번이상 접근해야함)
🙃不変オブジェクト
参照型データの
가변
は、データそのものではなく内部プロパティを変更した場合にのみ作成されます.データ自体を変更したい場合(新しいデータを割り当てる場合)は、基本データと同様に既存のデータは変更されません.どのような場合にオブジェクトを変更する必要がありますか?値として渡されるオブジェクトを変更しても、元のオブジェクトは変更されない場合があります.この場合、不変のオブジェクトが必要です.
🧐 JavaScriptからオブジェクトをコピーする方法
浅い放射と深い放射
浅いレプリケーションは、次のステップの値のみをコピーします.
const person1={name:'chloe'};
const person2=person1;
person1.name='jung';
person2.name//jung
person1===person2;
すなわち、データを直接生成するのではなく、データのメモリアドレスをユーザに渡し、データを共有する.深度コピーは、内部のすべての値を検索してコピーする方法です.
const person1={name:"chloe"};
const person2=Object.assign({},person1);
person1.name="jung";
person2.name// chloe
전혀 다른 메모리 주소의 데이터이므로 person2의 값은 변하지 않는다.
person1!==person2 형태만 같고 각자 다른 메모리 주소에 저장되어 있는 데이터이다.
データ参照ではなくオブジェクトの形状をコピーすることで、1つのオブジェクトが変更されても、他のオブジェクトのデータは影響を受けません.📍深度レプリケーションの一般的な方法
Object.assign()
オブジェクト形式のデータのマージを容易にする関数
const originObj={a:1};
const newObj=Object.assign({},originObj)
// 빈 object에 originObj를 병합하여 반환
newObj//{a:1}
originObj ===newObj //false
空のオブジェクトにコピーするオブジェクトをマージします.これにより、形式はoriginObjectですが、実際には空のオブジェクトとoriginObjectを結合した新しいオブジェクトが返されます.(同じ形状ですが、新しいオブジェクトを返します)展開演算子
const obj1={a:1,b:2};
const obj2={c:3};
const obj3={...obj1,...obj2};
obj3//{a:1,b:2,c:3}
...配置またはオブジェクト形式のカッコ展開で使用します.展開演算子の深度コピーを使用するには、次の方法を使用します.
const obj1={a:1,b:2}
const obj2={...obj1};
obj2//{a:1,b:2}
obj1===obj2//false
でも!この深度コピーは現在のDepth以上では深度コピーされません.ふかほうしゃトラップ
const obj1={a:{b:1}};
const obj2={...obj1};
obj2//{a:{b:1}}
obj1 === obj2// false
Depth가 2인 Object를 전개 연산자를 이용해 Obj2 변수에 할당했다.
obj1과 obj2는 형태가 같지만 연산자를 이용해 확인해보면 각자 다른 메모리 주소에 저장된 데이터로 제대로 깊은 복사가 된 것처럼 보인다.
그러나.. 깊은 복사가 된 것은 제일 바깥의 Depth뿐이다..
const obj1={a:{b:1}};
const obj2={...obj1};
obj2//{a:{b:1}}
obj1===obj2//false
obj1.a===obj2.a//true????
2番目のDepth以上の要素は、参照値を渡す浅いレプリケーション🧐完璧な深度レプリケーションを行うにはどうすればいいですか?
1)深度コピーを再帰的に実行!
-->ただし、深くコピーするシェイプに基づいて、再帰関数を作成してコピーします.面倒くさいこと.
2)JSON.parse()とJSON.stringgify()関数の使用
-->JSON.stringify関数を使用してオブジェクト全体を文字列に変換し、JSONを再開します.parse関数を使用して文字列をオブジェクトに変換します.
👉 詳細については、「深い関数」、「浅い関数」セクション:https://helloinyong.tistory.com/267を参照してください.
📍未定義とnull
未定義:1)ユーザーが明示的に指定した場合
=>これ自体が値です.Undefinedは空を意味するが、値として存在するため、propertyまたは配列内の要素には固有のキー値が存在する.(実績データ)
2)値が存在しない場合、JavaScriptエンジンにより自動的に値が割り当てられます.
=>この場合、構成または配列のキー値(インデックス)自体は存在しません.(値なし)
null
空を明示的に表す場合は、undefinedではなくnullを使用します.
Reference
この問題について(TIL. データ型を勉強しましょう.), 我々は、より多くの情報をここで見つけました https://velog.io/@chloeee/TIL.-데이터-타입에-대해-공부해보자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol