JavaScriptにおける参照型と基本型の違いについて調べてわかったこと,私の解釈を書いていきます。
型の種類
変数の型は基本型と参照型に分けることが出来ます。
基本型はNumber、String、Boolean、Symbol、undefined、nullの6つで、参照型はObject、Function、Arrayの3つがあります。
基本型
まずは基本型です。下のコードを見てください。
let a = 10;
let b = a; // ここではaの値10がコピーされる
console.log(b); // 10
a = 20;
console.log(b); // 10
基本型の場合、変数は値を持っており、上から2行目ではaの値である10がコピーされbはその値で初期化されます。下から2行目でaに20
を代入していますが、bの値は10のままです。これはaとbは独立しており、それぞれの変数がそれぞれの値を持っているからなのです。下の
ようなイメージだと思います。
参照型
参照型の場合、変数はアドレスを持っています。下のコードを見てください。
let person1 = { name: "tarou" };
let person2 = person1; // person1がさしているメモリのアドレスがコピーされる
console.log(person2.name); // tarou
person1.name = "hanako";
console.log(person2.name); // hanako
まず1行目でnameプロパティを持ったオブジェクトがメモリのどこかに作られます。person1に代入されるのはそのオブジェクトのメモリのア
ドレスです。ここが基本型との違いです。2行目ではperson1に入っているメモリのアドレスがコピーされます。つまりperson1もperson2も変
数としては別物だけど、同じオブジェクトを参照しているのです。下から2行目でperson1.name=”hanako”とすると、person2が同じオブジェ
クトを参照しているので、最後の行ではhanakoと出力されるわけです。下のようなイメージだと思います。
まとめ
- JavaScriptの変数は基本型と参照型がある
- 基本型は値自体を持っており、コピーするときは値がコピーされる
- 一方、参照型はメモリのアドレスを持っており、コピーするときはそのアドレスがコピーされる
参考サイト
思考の葉-基本型と参照型
JavaScript – Reference vs Primitive Values/ Types(こちらは動画です)