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