数値型 (number type)
JavaScriptの数値型は、1や-1などの整数と0.1などの小数を含めた数値の型です。PHPなどの言語では、数値について整数を表す型(int)と小数を表す型(floatやdouble)の2つの型を持ちます。Javaなどの言語では、整数型をさらに32ビットと64ビットに細分化する言語もあります。JavaScriptには、整数と小数を型レベルで区別するものはありません。どちらも数値型で表現します。
#
数値リテラルJavaScriptの数値リテラルは次のように数値を見たままに書きます。
javascript
123 // 整数-123 // 整数(負の数)20.315 // 小数
javascript
123 // 整数-123 // 整数(負の数)20.315 // 小数
小数は小数点ではじめる書き方もできます。また、整数も小数点で終わる書き方もできます。
javascript
0.1 === .15.0 === 5.
javascript
0.1 === .15.0 === 5.
#
2進数、8進数、16進数2進数、8進数、16進数の表記も可能です。それぞれ表現したい数値の前に0b
、0o
、0x
をつけます。
typescript
0b1010 // 2進数0o755 // 8進数0xfff // 16進数
typescript
0b1010 // 2進数0o755 // 8進数0xfff // 16進数
#
数値の区切り文字(numeric separators)JavaScriptの数値リテラルは可読性のためにアンダースコアで区切って書けます。何桁ごとに区切るかは自由です。表したい値や、国と地域の慣習などに合わせて選択できます。
javascript
100_000_000 // 1億
javascript
100_000_000 // 1億
ただし、_
を先頭や末尾、小数点の前後、連続で2個以上置くことはできません。つまり次のような表記はできません。
typescript
_100100_100_.0100._01__00
typescript
_100100_100_.0100._01__00
#
数値リテラルのプロパティJavaScriptの数値リテラルのプロパティを直接参照する場合、小数点のドットとプロパティアクセッサーのドットが区別できないため、構文エラーになります。
typescript
5.toString(); // この書き方は構文エラー
typescript
5.toString(); // この書き方は構文エラー
これを回避するには、ドットを2つ続けるか、数値をカッコで囲む必要があります。
javascript
5..toString();(5).toString();
javascript
5..toString();(5).toString();
#
数値型の型注釈TypeScriptで数値型の型注釈はnumber
を用います。
typescript
const count: number = 123;
typescript
const count: number = 123;
よく似た名前の型としてNumber
型がありますが、これとnumber
は別物なので注意してください。
#
数値の範囲JavaScriptの数値型は、IEEE 754の倍精度浮動小数です。64ビットのうち、52ビットが数値の格納に、11ビットが小数の位置に、1ビットが正負符号に使われます。正確に扱える数値は-(2^53 − 1)
から2^53 − 1
の間です。整数について言うと、他言語の64ビット整数型の範囲より狭いので注意しましょう。
#
特殊な数値JavaScriptの数値型には、NaN
とInfinity
という特殊な値があります。
#
NaNNaN
は非数(not-a-number)を表す変数です。JavaScriptでは、処理の結果、数値にならない場合にNaN
を返すことがあります。たとえば、文字列を数値に変換するparseInt
関数は、数値化できない入力に対し、NaN
を返します。
javascript
const price = parseInt("百円");console.log(price); //=> NaN
javascript
const price = parseInt("百円");console.log(price); //=> NaN
値がNaN
であるかのチェックはNumber.isNaN
を用います。
javascript
const price = parseInt("百円");if (Number.isNaN(price)) {console.log("数値化できません");}
javascript
const price = parseInt("百円");if (Number.isNaN(price)) {console.log("数値化できません");}
NaN
は特殊で、等号比較では常にfalse
になるので注意してください。
javascript
console.log(NaN == NaN); //=> falseconsole.log(NaN === NaN); //=> false
javascript
console.log(NaN == NaN); //=> falseconsole.log(NaN === NaN); //=> false
#
InfinityInfinity
は無限大を表す変数です。たとえば、1を0で割った場合、この値になります。