大きく分けて2つのデータ型がある
・一度作成したら値を変更できないプリミティブ型のデータ
・作成した後も変更できるオブジェクト型のデータ
プリミティブ型
・オブジェクトではなく、メソッドを持たない
・既存の値を変更できないイミュータブルな値
・7種類のデータ型
1 文字列(string)
2 数値(number)
3 長整数(bigint)
4 理論値(boolean)
5 undefined(undefined)
6 symbol(symbol)
7 null(object)
オブジェクト型
・プリミティブ型以外のもの
・既存の値を変更できるミュータブルな値
なぜプリミティブ型でメソッドが使えるのか
自動的にそれぞれのプリミティブ値に対応するラッパーオブジェクトへ変換してくれるため
ラッパーオブジェクト
本来オブジェクトではない型の値を、自動的にオブジェクトで包んであたかもオブジェクトとしての振る舞いを持たせる機能
//プリミティブ値もオブジェクトのように扱える
const arr = ["tom", "jerry", "spike", "tyke"];
console.log(Object.keys(arr)); // ['0', '1', '2', '3']
console.log(Object.values(arr)); // ['tom', 'jerry', 'spike', 'tyke']
const str = "hello";
console.log(Object.keys(str)); // ['0', '1', '2', '3', '4']
console.log(Object.values(str)); // ['h', 'e', 'l', 'l', 'o']
const obj = {name: "tom", age: 5};
console.log(Object.keys(obj)); // ['name', 'age']
console.log(Object.values(obj)); // ['tom', 5]