JavaScript 数値

❮ 前章へ 次章へ ❯

の有無にかかわらず、を書くことができます。

JavaScript には1つの数値タイプしかありません。

数値には、小数を指定してもしなくても問題ありません。


JavaScript 数値

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 の数値は常に64ビットの浮動小数点です

他の多くのプログラミング言語とは異なり、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%正確ではありません:

var x = 0.2 + 0.1;         // x will be 0.30000000000000004
Try it yourself »

上の問題を解決するには、乗算と除算が役立ちます:

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x will be 0.3
Try it Yourself »

16進数

数値の前に 0x がある場合、JavaScript は数値定数を16進数として解釈します。

var x = 0xFF;             // x will be 255
Try it Yourself »

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 が生成されます:

var x =  2 / 0;          // x will be Infinity
var y = -2 / 0;          // y will be -Infinity
Try it Yourself »

Infinity は数値です:typeof Infinity は数値を返します。

typeof Infinity;        // returns "number"
Try it Yourself »

NaN - Not a Number

NaN は、数値が正当なものでないことを示す JavaScript の予約語です。

数値以外の文字列を使用して算術演算を行うと、NaN(Not a Number)になります:

var x = 100 / "Apple";  // x will be NaN (Not a Number)
Try it Yourself »

しかし、文字列部分が数値である場合、結果は数値になります:

var x = 100 / "10";     // x will be 10
Try it Yourself »

グローバル JavaScript 関数 isNaN() を使用すれば、値が数値かどうかを調べることができます。

var x = 100 / "Apple";
isNaN(x);               // returns true because x is Not a Number
Try it Yourself »

NaN に注目してください。算術演算で NaN を使用すると、結果は NaN になります:

var x = NaN;
var y = 5;
var z = x + y;         // z will be NaN
Try it Yourself »

 または、.結果が連結になる可能性があります:

var x = NaN;
var y = "5";
var z = x + y;         // z will be NaN5
Try it Yourself »

NaN は数値で、typeof NaN は数値を返します:

typeof NaN;             // returns "number"
Try it Yourself »

Number はオブジェクトにできます

通常、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 »


❮ 前章へ 次章へ ❯