値タイプ(Value Type)と引用タイプ(Reference Types)
1316 ワード
Javascriptには二つの基本データタイプがあります.値タイプ(Value Types)と引用タイプ(Reference Types)です.
値の種類には、 Number String Boolean Symbol undefined null 参照の種類は以下の通りです. Object Function Aray 値の種類と引用の種類にはどのような違いがありますか?
引用の種類を使って何が起こるか試してみます.
まとめて言うと、値の種類は値をコピーし、オブジェクトの参照の種類は参照をコピーします.
次の例を見てください.
次に参照の種類を見てみます.
値の種類には、
let x = 10;
let y = x;
x = 20;
私たちは今、xとyのそれぞれの値を確認します.x
>>> 20
y
>>> 10
可視xとyは互いに独立している.xの値をyに割り当てると、xの値を変数yにコピーするだけです.引用の種類を使って何が起こるか試してみます.
let x = { value: 10 };
let y = x;
x.value = 20;
検査xとyの値:x
>>> {value: 20}
y
>>> {value: 20}
xオブジェクトを修正するとyオブジェクトもそれに応じて変化することが分かります.xとy変数はオブジェクトのメモリアドレスを指しているだけです.xをyに賦課する時はyも対象を指すだけです.まとめて言うと、値の種類は値をコピーし、オブジェクトの参照の種類は参照をコピーします.
次の例を見てください.
let number = 10;
function increase(number) {
number++
};
increase(number);
console.log(number);
// :
10
値タイプnumberが関数increaseに入ると、その値が関数に与えるローカルパラメータだけがコピーされますので、関数の実行はnumberを変更しません.次に参照の種類を見てみます.
let number = { value: 10 };
function increase(number) {
number.value++
};
increase(number);
console.log(number);
// :
// {value: 11}
オブジェクトがパラメータとして関数に伝達される場合、参照で伝達されます.関数内のパラメータnumberと外のnumberは同じオブジェクトを指します.関数内でnumberを修正すると関数外のnumberも変わります.