JavaScript/数値

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

数値(すうち、number)はを表すプリミティブ値です。 Numberオブジェクトは数値プリミティブのラッパーオブジェクトです。

概要[編集]

JavaScriptでは数値を浮動小数点数でサポートされています(ここでは数値と長整数は別のものとして扱います)。 浮動小数点数とは、コンピュータで用いられる実数の近似で、IEEE 75464ビット倍精度浮動小数点数が使われます。

数値リテラル[編集]

数値リテラル(Numeric literal)は次のような形をしています。

42
42.0 // 上と同じ値
-1
0
864e5
0xFFFF

864e5というのは科学的表記法で)、すなわち86400000に等しい数値です。 0xFFFFというのは十六進法による表示で、十進法の65535に等しい数値です。 JavaScriptにおいて0xFFFF65535はまったく同じ数値です。 JavaScriptには二進法や八進法の整数リテラルはありませんでしたが、ECMA-262第6版で導入されました。

0b1101 // 13
0o3162 // 1650

二進法の整数リテラルは 0b(あるいは0B)を前置し、八進法の整数リテラルは0o(あるいは0o)を前置します[1]0だけを前置する八進法の整数リテラルは過去にサポートされていましたがECMA-262第3版で削除されました。多くの処理系では後方互換のために依然として八進法の整数リテラルをサポートしていますが、非推奨とされstrictモードに於いてはエラーになります。

数値リテラルに区切り文字としての '_' 使う形式が、ES2021で導入されました[2]

1_234_567
2_3_5_7_11

使うかどうかは任意で、3桁ごとに置くなどの制限はありません。 数値の、先頭に '_' を置くと識別子になってしまいます。 数値の末尾に '_' を置くと SysnatxError となります。 '_' を2つ以上続けても SysnatxError となります。

0.5
.5 // 上と同じ値
-1.4142135623730951
3.141592653589793
1.0e-8

1.0e-8、すなわち0.00000001と等しい数値です。 小数点を伴った数値リテラルは、10進数に限られそれ以外の基数で小数点をつもなうと Syntax Error になります。

整数と浮動小数点数は区別されない[編集]

JavaScriptの数値は IEEE 75464ビット倍精度浮動小数点数です。 64ビット倍精度浮動小数点数で精度が落ちることなく整数を表現できる最小値と最大値は、それぞれ Number.MIN_SAFE_INTEGER と Number.MAX_SAFE_INTEGER で提供されます。 typeof 演算子を数値に適用すると値に関係なく "number" を返します。 数値が(精度が失われているにしても)整数であるかは Number.isInteger(number)で、精度を失っていない整数であるかは Number.isSafeInteger(number) で調べることが出来ます。 ビット演算は64ビット倍精度浮動小数点数を32ビット符号付き整数に変換してから演算されます。 符号なし右シフト >>> だけは趣が異なり -1>>>1 === 2147483647 と結果は正になります。

JavaScriptの数値の型

C言語の数値変数には、整数型(int)や浮動小数型(float)などといった型があります。 しかし JavaScript の数は倍精度の64ビットの浮動小数しかなく整数型は浮動小数の仮数部を使って表現されます。

これはプリミティブな「数値」の場合で、BigIntやTypedArrayは異なる内部構造を持っています。


数値の取り得る特殊な値[編集]

NaN[編集]

NaN(ナン、Not a Number、非数、ひすう)とは、数値に変換できない文字列を数値に変換しようとしたり、数値演算に不正なパラメータが与えられら事を表す特殊な値です。IEEE 754の NaN へのインターフェースで、グローバルオブジェクトの静的プロパティ NaN として参照できます。

Infinity[編集]

Infinity(インフィニティ、無限大、むげんだい)とは、典型的には演算結果がオーバーフローした時に取る値で、セロ除算でも生成されます。 IEEE 754の Infinity へのインターフェースで、グローバルオブジェクトの静的プロパティ Infinity として参照できます。

Numberオブジェクト[編集]

NumberオブジェクトはJavaScriptのプリミティブ型である数値型をラップします。Numberコンストラクタに数値として解釈できないオブジェクト(たとえば "A" などの文字列)を渡すと、NaNを返します。

var two = new Number(2);

NumberオブジェクトのインスタンスとJavaScriptの数値は厳密には等しくないことに注意してください。

new Number(1) ==  1; // true
// しかし
new Number(1) === 1; // false

/*
 * なぜならば
 * typeof new Number(1) == 'object' かつ
 * typeof 1             == 'number' なので
 */

ただし、プリミティブ型の数値に対してメソッド呼び出しをすると自動的に Number オブジェクトが作られます。

また、Number 関数により他の型の値をプリミティブ型の数値に型変換します。

var two = Number("2");

静的プロパティ[編集]

MAX_VALUE
JavaScriptで表すことのできる最大の数
MIN_VALUE
JavaScriptで表すことのできる最小の数
NaN
非数
NEGATIVE_INFINITY
負の無限大
POSITIVE_INFINITY
正の無限大 (Infinity)
prototype
Numberオブジェクトのプロトタイプ

静的メソッド[編集]

toExponential(fractionDigits=undefined)
toFixed(digits=0)
toLocaleString()
toPrecision()
toString(radix=10)
このオブジェクトのradix進数文字列表現を返す。
valueOf()
このオブジェクトのプリミティブ値を返す。
ES6でNumber組み込みオブジェクトに追加されたプロパティ

ES6 で幾つかの定数とメソッドがNumber組み込みオブジェクトに追加されました。

Number.EPSILON
1より大きい最小の数と1の差(計算機イプシロン
Number.MIN_SAFE_INTEGER
安全な整数の最小値
Number.MAX_SAFE_INTEGER
安全な整数の最大値
Number.isFinite(number)
isFinite(number)
number が無限大であれば真を返す
Number.isInteger(number)
number が整数であれば真を返す
Number.isSafeInteger(number)
number が安全な整数の最大値と安全な整数の最小値の間にある整数であれば真を返す
Number.isNaN(number)
isNaN(number)
number が NaN であれば真を返す


脚注[編集]

  1. ^ ECMA-262 6th Edition 11.8.3 Numeric Literals
  2. ^ tc39/proposal-numeric-separator: A proposal to add numeric literal separators in JavaScript.

関連項目[編集]

  • Math - 数学関数と定数

外部リンク[編集]