データ型 プリミティブ型[JavaScript]


## 自分の感想：

プログラミング言語を学ぶときに、「型が重要だよ！」
という話はよく聞くと思います。

はて？🐯🪽型とは・・・？

と疑問に思った方もたくさんいるのではないでしょうか？

例えば武道で言えば基本的な動作の構えや心構えでしょう。
それを守り、破るのが守破離であり、
型がある人間が型を破るのを型破りといい、型がない人間が型を破るのが形無しという。

など日本人には古くからこの型という概念が深く根付いていると思います。

そんな型について。
これはかなり重要なのではないか・・・
と思い、僕が勉強しているJavaScriptでの型。
についてしっかりとまとめておきたいと思います。


## 目次：
[・データ型とは？](#データ型とは)
[・JavaScriptにおける型とは？](#javascriptにおける型とは)
[・JavaScriptが持つ２つの型](#javascriptが持つ２つの型)

[・プリミティブ型](#プリミティブ型)
	[・文字列、string](#文字列string)
	[・数値、number](#数値number)
	[・長整数、Biging](#長整数bigint)
	[・論理値、Boolean](#論理値boolean)	
	[・undefind](#undefind)
	[・シンボル](#シンボル)
	[・null](#null)
 
 [・まとめ](#まとめ)
 

## 定義：
### データ型とは？

>wikiぺディア先生引用：
>
>データ型（データがた、Data type）とは、コンピュータプログラミングや計算機科学において、属性を持つデータを分類し、その扱われ方をコンパイラやインタープリタに知らせるプログラム。単に型（かた、Type）とも言われる。
多くのプログラミング言語は、整数型・浮動小数点型・ブール型・文字型といった基本データ型を備えている。計算対象にされるデータは、しばしば値（value）と言われる。データ型は式内の値を制約して、関数への適用可能性や変数への代入可能性を定義する。データ型は、値の集合の概念と近似している。

>コンセプト[編集]
「型システム」も参照
データ型は、型システムで扱われる。型システムは、データの定義と解釈と用法を定義する形式体系である。プログラム内の多種多様なデータ間の計算の整合性を保ち、不適切な計算がなされないようにするのが型システムの目的である。これは型安全性と言われて、安全なデータ計算を保証する概念である。
:::note info 
要するに：
・型はデータの種類を表す。
・種類が違うことでコンピュータが安全で効率のいい計算ができるようになる。
:::

そのためにそれぞれ分類する必要がある。
ということなのだと思います。


## JavaScriptにおける型とは？


では、型の概念がわかったところで、JavaScriptにおける**型**とは一体なんなのでしょうか？

JavaScriptは一般に型がない言語だと言われていたり、あるような話も聞いたりと、
どちらなのでしょうか？

::: note info
答えは、JavaScriptは、「動的かつ弱い型付け言語」である。
:::

**動的型付け**とは、
プログラムを実行する際に変数や値の型をあらかじめ宣言する必要がない言語です。
つまり、変数を宣言するときに、その変数がどの型の値を持つかを指定する必要がありません。

また、
**弱い型付け**というのは、
処理をする際に違う型が含まれる場合は、型でエラーを発生させるのではなく、適切と思われる型変換をしてしまうことを指します。

この２つの自由な性質のせいで、JavaScriptは型のない言語だと誤解されやすいのだと思います。


## JavaScriptが持つ２つの型

では、ここまででJavaScriptには型の概念があるということを理解できたと思います。

では一体JavaScriptの型はどういった種類があるのでしょう？

::: note info
答えを言ってしまうと
JavaScriptには「プリミティブ型」と「オブジェクト型」の２つの種類があります。
:::

「プリミティブ型」は、真偽値や数値などの基本的な値の型のことです。 
プリミティブ型の値は、一度作成したらその値自体を変更できないというイミュータブル（immutable）の特性を持ちます。 
一方、プリミティブ型ではないものをオブジェクト（複合型）と呼び、 
オブジェクトは複数のプリミティブ型の値またはオブジェクトからなる集合です。

オブジェクト型はオブジェクト、配列、関数など単体で説明することが多いため、別でまとめたいと思います。

## プリミティブ型

>MDN引用：
JavaScript において、プリミティブ (primitive、プリミティブ値、プリミティブデータ型) はオブジェクトでなく、メソッドを持たないデータのことです。 7 種類のプリミティブデータ型があります。
* 文字列
* 数値
* 長整数
* 論理値
* undefined
* シンボル
* null

### ・文字列（String）

文字列は、連続した文字の集まりのことです。
’’『シングルクォーテーション』または、””『ダブルクォーテーション』で文字を囲うことで、テキスト文字として表示させることができます。
`(バッククォート)を使用することで、改行を含む複数行のテキストや${}(ドルマーク＋中カッコ)の中に式を記載して、展開可能なテンプレートリテラルを使用することもできる。

### ・数値（Number）


正の数、負の数、整数、浮動小数、NaNなど
JavaScriptの数値型は１つしかない。

>「整数」「小数」「ビット数」によって数値の型を区別するプログラミング言語もありますが、JavaScriptにおける数値の型は、「IEEE754倍精度浮動小数点数（64ビット）」と1種類のみです。


### ・長整数（BigInt）

長整数は、任意の精度の整数を扱います。JavaScriptの数値型では扱えない大きな整数を扱うことができる。
（あまり使用しない）

### ・論理値（Boolean）
Boolean型とは、tureとfalseの2つの真偽値を扱うデータ型です。
Boolean型には、trueとfalseの真偽値リテラルがあります。

### ・undefind
Undefined型とは、値が未定義であることを意味するデータ型です。プリミティブ値undefinedは、宣言のみが行われた変数やオブジェクト内の存在しないプロパティへのアクセスに割り当てられます。JavaScriptでは、nullとundefinedは明確に区別されています。
ここで注意が必要なのは、undefinedはリテラルではないということです。undefinedは、ただのグローバル変数で、undefinedという値を持っているだけです。
以上が、プリミティブ型の分類になります。

### ・シンボル
シンボルは、ES6から導入された比較的新しいデータ型で、唯一無二のユニークな値を持ちます。作成するたびにまったく新しいシンボルが生成されることが特徴的です。シンボルのデータ型は、typeof演算子を使用するとsymbolを返します。

現状、シンボルを使用したプログラムを見る機会は多くはありませんが、衝突を避けるためにオブジェクトのプロパティーのキーとして利用されることがあります。

### ・null
Null型とは、値が存在しないことを意味するデータ型です。 nullリテラルであるnullは、プリミティブ値nullを返します。
ただしここで注意点があります。typeof演算子でnullのデータ型を調べるとobjectとなります。


また、typeof演算子を使うことで、データ型を確認できる。

## まとめ：

改めて型とは何か？JavaScriptがなぜ型のない言語と呼ばれていたかを調べることで、すっきりとすることができた。

一方、調べれば調べるほど、予備知識やその予備知識のための予備知識など調べてもキリがないのがこの型という概念であるなと思い知り、自分の知識のなさとまとめる能力の低さを実感するいい機会ともなった。