TIL 014|デフォルトタイプと参照タイプの違い
4865 ワード
(画像ソース:https://velog.io/@imjkim49)
JavaScriptのデータ型には、数値、String、Boolean、null、Undefinedなどがあります.これらのデータ型をデフォルト型(Primitive Type)と呼びます.
またjavascriptには、参照によって伝達されるArray、Function、Objectなどもある.実際には、参照タイプと呼ばれるすべてのデータ型をオブジェクトと見なすことができます.
1.デフォルトのタイプは、値自体をコピーします。
let a = 100;
let b = a;
console.log(a, b); // 100, 100
a = 200;
console.log(a, b); // 200, 100
最初にaという変数に基本タイプ100が割り当てられた.したがって、aは100の値を有する.そして、変数aを新しい変数bに割り当てると、変数bの100という値自体がコピーされる.結果a,bともに100の値が得られた.次に、変数aに200を再付与するが、変数bの値は変わらないと判断することができる.変数aとbは完全に分離されており、同じ値を持つ変数を変更しても、別の変数には何の影響もないことがわかる.
2.参照タイプ参照(アドレス)値をコピーします。
let player1 = {
name: 'tomato',
color: 'red',
isDeveloper: true
};
let player2 = player1;
console.log(player1.name, player2.name); // 'tomato', 'tomato'
player1.name = 'apple';
console.log(player1.name, player2.name); // 'apple', 'apple'
参照タイプの1つであるオブジェクトをPlayer 1に割り当て、Player 2にPlayer 1を割り当てます.両方のオブジェクトが同じ値(上が「トマト」)であることを確認し、プレイヤー1のキー値を再割り当てします.しかし、上記の基本タイプの例とは異なり、プレイヤー2のキー値も変化する.このような理由は,参照タイプの基本的特徴と関係がある.オブジェクトは、コンピュータのメモリのどこかで生成されます.プレイヤー1={}を作成すると、変数プレイヤー1がそのオブジェクトのアドレスを持つオブジェクトがメモリに作成されます.レプリケーション値自体のデフォルトタイプとは異なり、リファレンスタイプはリファレンス(メモリアドレス)のみをレプリケートし、実際の値はレプリケートしません.すなわち、player 1およびplayer 2は、実際のデータを有するオブジェクトの参照(アドレス)値のみを有する.
references
https://velog.io/@recordboy/%EC%9E%90%EB%A3%8C%ED%98%95%EC%B0%B8%EC%A1%B0-%ED%83%80%EC%9E%85/
https://velog.io/@jakeseo_me/2019-04-01-1904-%EC%9E%91%EC%84%B1%EB%90%A8-2bjty7tuuf
https://velog.io/@recordboy/JavaScript-%EC%96%95%EC%9D%80-%EB%B3%B5%EC%82%ACShallow-Copy%EC%99%80-%EA%B9%8A%EC%9D%80-%EB%B3%B5%EC%82%ACDeep-Copy
Reference
この問題について(TIL 014|デフォルトタイプと参照タイプの違い), 我々は、より多くの情報をここで見つけました https://velog.io/@ktg6360/TIL-014-기본-타입과-참조-타입의-차이점テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol