JavaScript には1つの数値タイプしかありません。
数値には、小数を指定してもしなくても問題ありません。
JavaScript の数値は、小数点を使っても、小数点なしでも記述することができます:
var x = 34.00; // A number with decimals
var y = 34; // A number without decimals
非常に大きいか、非常に小さい数値は、指数表記で記述することができます:
var x = 123e5; // 12300000
var y = 123e-5; // 0.00123
他の多くのプログラミング言語とは異なり、JavaScript は整数、短、長、浮動小数点などの異ったタイプの数値を定義しません。
JavaScript の数値は、国際 IEEE 754 標準に従って、常に倍精度浮動小数点数として格納されます。
このフォーマットでは、64 ビットで数値が格納されます。数値(小数)がビット 0 〜 51 に、指数がビット 52 〜 62 に、符号はビット 63 に格納されます:
値 (aka Fraction/Mantissa) | 指数 | 符号 |
---|---|---|
52 bits (0 - 51) | 11 bits (52 - 62) | 1 bit (63) |
整数 (小数点や指数表記のない数値) は、15桁までの正確な値とみなされます。
var x = 999999999999999; // x will be 999999999999999
var y = 9999999999999999; // y will be 10000000000000000
Try it Yourself »
小数点以下の桁数の最大値は17ですが、浮動小数点演算は常に100%正確ではありません:
上の問題を解決するには、乗算と除算が役立ちます:
数値の前に 0x がある場合、JavaScript は数値定数を16進数として解釈します。
07 のように、ゼロが先行するような数字を絶対に書かないでください。
JavaScript の一部のバージョンでは、先行ゼロの数値は8進数として解釈されます。
デフォルトでは、JavaScript は数字を基数 10 の数値として表示します。
しかし、toString() メソッドを使えば、16進数、8進数、2進数として数値を出力することができます。
var myNumber = 128;
myNumber.toString(16); // returns 80
myNumber.toString(8); // returns 200
myNumber.toString(2); // returns 10000000
Try it Yourself »
Infinity (または -Infinity) は、可能な数値より大きな数を計算した場合に JavaScript が返す値です。
var
myNumber = 2;
while (myNumber != Infinity) { // Execute until Infinity
myNumber = myNumber * myNumber;
}
Try
it yourself »0 で除算すると Infinity が生成されます:
Infinity は数値です:typeof Infinity は数値を返します。
NaN は、数値が正当なものでないことを示す JavaScript の予約語です。
数値以外の文字列を使用して算術演算を行うと、NaN(Not a Number)になります:
しかし、文字列部分が数値である場合、結果は数値になります:
グローバル JavaScript 関数 isNaN() を使用すれば、値が数値かどうかを調べることができます。
NaN に注目してください。算術演算で NaN を使用すると、結果は NaN になります:
または、.結果が連結になる可能性があります:
NaN は数値で、typeof NaN は数値を返します:
通常、JavaScript の数値はリテラルから作成するプリミティブな値です:var x = 123
しかし、数値は new キーワードでオブジェクトとして定義することもできます:var y = new Number(123)
var x = 123;
var y = new Number(123);
//
typeof x returns number
//
typeof y returns object
Try
it yourself »
Number オブジェクトを作成しないでください。実行速度が遅くなります。
new キーワードはコードを複雑にします。これにより予期しない結果が生じる可能性があります:
== 演算子を使用する場合、同じ数値は等しくなります:
var x = 500;
var y = new Number(500);
// (x == y) is true because x and y have equal values
Try it Yourself »
=== 演算子を使用する場合、型と値の両方が同じでなけれならないので、数字が同じでも等しくなりません。
var x = 500;
var y = new Number(500);
// (x === y) is false because x and y have different types
Try it Yourself »
もっと悪いのは、 オブジェクトを比較することはできません:
var x = new Number(500);
var y = new Number(500);
// (x == y) is false because objects cannot be compared
Try it Yourself »
2つの JavaScript オブジェクトを比較すると常に false が返されます。
Exercise 1 » Exercise 2 » Exercise 3 » Exercise 4 »