JavaScript 基本型(primitive)と参照型(reference)の違い

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(こちらは動画です)