JavaScriptのデータ型は大きく分けて、基本型(プリミティブ型)と参照型の2つに分類することができます。これら2つの型の違いは、値が直接変数に格納されるのか、もしくはメモリ上のアドレス(参照値)が格納されるのかなどの違いがあります。
スポンサーリンク
基本型(プリミティブ型)
基本型には以下の種類があります。
真偽値(boolean)
数値(number)
文字列(string)
null
undefined
シンボル(symbol)
基本型の値は、変数に直接格納されます。
1 2 3 4 5 6 7 |
var book1 = 'こころ'; var book2 = book1; //book1の値がbook2に直接格納される var book1 ='三四郎'; //book1の値を変更 console.log(book1); //三四郎 console.log(book2); //「こころ」のまま |
1行目において変数book1、そして2行目のbook2には「こころ」が直接格納されています。よってbook1の値を4行目で「三四郎」に変更しても、book2の値は「こころ」のままです。
基本型の場合、同じ値が代入された変数は===演算子においてtrueが返されます。
1 2 3 4 |
var book1 = 'こころ'; var book2 = 'こころ'; console.log(book1===book2); //true |
参照型
上記で挙げた基本型のいずれにも属さないのが参照型 です。参照型には以下のような種類が挙げられます。
オブジェクト(object)
配列(array)
関数(function)
参照型ではオブジェクトがコピーされる時、その値自体がコピーされるのではなく、そのオブジェクトが格納されているメモリ上のアドレス(参照値)がコピーされます。
1 2 3 4 5 6 |
var array1 = ['こころ','三四郎']; var array2 = array1; //array1オブジェクトのアドレスが格納される array1[0] = 'それから'; //「こころ」を「それから」に変更 console.log(array2[0]); //それから |
2行目では、変数array1の値が格納されているメモリ上のアドレスがarray2に格納されます。そして、4行目においてarray1の値を変更すると、それに伴いarray2の内容も変更されます。これはarray1とarray2のオブジェクトは同じアドレスを共有しているからです。
参照型においては、たとえ同じ値のオブジェクトであっても参照値が違えば===演算子においてもfalseが返されます。
1 2 3 4 |
var array1 = ['こころ','三四郎']; var array2 = ['こころ','三四郎']; console.log(array1===array2); //false |
変数の型はtypeof演算子で知ることができます。
1 2 3 4 5 6 7 |
var book1 = 'こころ'; var array1 = ['こころ','三四郎']; var price =1000; console.log(typeof book1); //string console.log(typeof array1); //object console.log(typeof price); //number |