TypeScript 0での割り算まとめ

TypeScriptでの割り算をするときに、0で割った場合どうなるのかについて、実際に動かしてみた結果をまとめたいと思います。

#### 参考サイト
-「サバイバルTypeScript - number型 (数値型)」
https://typescriptbook.jp/reference/values-types-variables/number

# 目次
　[number型](#number型)
　[0で割るとどうなるのか](#0で割るとどうなるのか)
　[Infinityで割り算](#infinityで割り算)
　[NaNで割り算](#nanで割り算)
　[まとめ](#まとめ)

#### number型
TypeScriptでは、数を扱うときにnumber型でアノテーション(型注釈)を行うことができます。
number型は大きく分けて以下に分類することができます。
|名称|概要|詳細|
|:---|:---|:---|
|数値リテラル|数値をそのまま利用|整数、小数、負数を表現|
|進数|2進数、8進数、16進数で表現|数値の前に0b(2進数)、0o(8進数)、0x(16進数)をつけて表現|
|NaN(Not-a-Number)|数値とならない値、非数を表す|数値として処理ができない場合等で発生 (例："hoge" / 3）|
|Infinity|無限大を表す|TypeScriptで表現できない値になった場合で発生(例：1 / 0)|

#### 0で割るとどうなるのか
```typescript:sample1.ts
const oneByZero: number = 1 / 0
console.log(oneByZero) // Infinity
========
const zeroByZero: number = 0 / 0
console.log(zeroByZero) // NaN
========
const minusOneByZero: number = -1 / 0
console.log(minusOneByZero) // -Infinity
========
const string: any = "hoge"
const stringByZero: number = string / 0
console.log(stringByZero) // NaN
========
const InfinityByZero: number = Infinity / 0
console.log(InfinityByZero) // Infinity
========
const NaNByZero: number = NaN / 0
console.log(NaNByZero) // NaN
========
const minusInfinityByZero: number = -Infinity / 0
console.log(minusInfinityByZero) // -Infinity
```
結果は、以下の値が返ってきました。
1を0で割るとInfinity
0を0で割るとNaN
-1を0で割ると-Infinity
文字列を0で割るとNaN
Infinityを0で割るとInfinity
NaNを0で割るとNaN
-Infinityを0で割ると-Infinity


#### Infinityで割り算
```typescript:sample2.ts
const oneByInfinity: number = 1 / Infinity
console.log(oneByInfinity) // 0
========
const zeroByInfinity: number = 0 / Infinity
console.log(zeroByInfinity) // 0
========
const minusOneByInfinity: number = -1 / Infinity
console.log(minusOneByInfinity) // -0
========
const string: any = "hoge"
const stringByInfinity: number = string / Infinity
console.log(stringByInfinity) // NaN
========
const NaNByInfinity: number = NaN / Infinity
console.log(NaNByInfinity) // NaN
========
const InfinityByInfinity: number = Infinity / Infinity
console.log(InfinityByInfinity) // NaN
========
const minusInfinityByInfinity: number = -Infinity / Infinity
console.log(minusInfinityByInfinity) // NaN
```
結果は、以下の値が返ってきました。
1をInfinityで割ると0
0をInfinityで割ると0
-1をInfinityで割ると-0
文字列をInfinityで割るとNaN
NaNをInfinityで割るとNaN
InfinityをInfinityで割るとNaN
-InfinityをInfinityで割るとNaN

#### NaNで割り算
```typescript:sample3.ts
const oneByNaN: number = 1 / NaN
console.log(oneByNaN) // NaN
========
const zeroByNaN: number = 0 / NaN
console.log(zeroByNaN) // NaN
========
const minusOneByNaN: number = -1 / NaN
console.log(minusOneByNaN) // NaN
========
const string: any = "hoge"
const stringByNaN: number = string / NaN
console.log(stringByNaN) // NaN
========
const NaNByNaN: number = NaN / NaN
console.log(NaNByNaN) // NaN
========
const InfinityByNaN: number = Infinity / NaN
console.log(InfinityByNaN) // NaN
========
const minusInfinityByNaN: number = -Infinity / NaN
console.log(minusInfinityByNaN) // NaN
```
結果は、以下の値が返ってきました。
1をNaNで割るとNaN
0をNaNで割るとNaN
-1をNaNで割るとNaN
文字列をNaNで割るとNaN
NaNをNaNで割るとNaN
InfinityをNaNで割るとNaN
-InfinityをNaNで割るとNaN

#### まとめ
0で割ると返ってくる値に「Infinity」「NaN」「-Infinity」があることがわかりました。また、いずれの値もtypeofで確認するとnumberとなります。
判別するにはisNaN関数やisFinite関数があるようです。


https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/isNaN

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/isFinite