JavaScriptの数字

JavaScript には数値の種類が一種類のみです。

数値を書くとき、小数点があるかどうかは自由です。

JavaScript 数値

JavaScriptの数値は小数点を含むかどうかに関わらず、書けることができます:

実例

var x = 3.14;    // 小数点がある数値
var y = 3;       // 小数点のない数値

自分で試してみてください

非常に大きい数や非常に小さい数は科学記数法で書くことができます:

実例

var x = 123e5;    // 12300000
var y = 123e-5;   // 0.00123

自分で試してみてください

JavaScriptの数値は常に 64 ビットの浮動小数点です

多くの他のプログラミング言語とは異なり、JavaScriptは整数、短い、長い、浮動小数点など、異なる数の型を定義しません。

JavaScriptの数値は常に双精度浮動小数点で保存され、国際IEEE 754標準に従っています。

この形式は 64 ビットで数値を保存し、0 から 51 までのビットは数字(部分)を保存し、52 から 62 までのビットは指数を保存し、63 ビットは符号を保存します:

値(分数/分子) 指数 符号
52ビット(0 - 51) 11ビット (52 - 62) 1ビット (63)

精度

整数(指数や科学記数法を使用しない場合)は 15桁まで正確になります。

実例

var x = 999999999999999;   // x は 999999999999999 になります
var y = 9999999999999999;  // y は 10000000000000000 になります

自分で試してみてください

小数の最大桁数は 17桁ですが、浮動小数点の算術は常に 100% 精確ではありません:

実例

var x = 0.2 + 0.1;         // x は 0.30000000000000004 になります

自分で試してみてください

上記の問題を解くのに役立つのは、乗除法の使用です:

実例

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x は 0.3 になります

自分で試してみてください

数と文字列の足し算

警告!!

JavaScriptの加法と連結(連結)はすべて + 演算子を使用します。

数は加法で、文字列は連結で使用されます。

二つの数を足すと、結果は数になります:

実例

var x = 10;
var y = 20;
var z = x + y;           // z は 30(数)になります

自分で試してみてください

二つの文字列を足すと、結果は文字列の連結になります:

実例

var x = "10";
var y = "20";
var z = x + y;           // z は 1020(文字列)になります

自分で試してみてください

数と文字列を足すと、結果は文字列の連結になります:

実例

var x = 10;
var y = "20";
var z = x + y;           // z は 1020(文字列)になります

自分で試してみてください

文字列と数値を足すと、結果も文字列の連結になります:

実例

var x = "10";
var y = 20;
var z = x + y;           // z は 1020(文字列)になります

自分で試してみてください

一般的な間違いは、結果が 30 であると考えます:

実例

var x = 10;
var y = 20;
var z = "The result is: " + x + y;

自分で試してみてください

一般的な間違いは、結果が 102030 であると考えます:

実例

var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;

自分で試してみてください

JavaScriptは左から右に構文解析を行います。

x と y がどちらも数であるため、10 + 20 は足されます。

z は文字列であるため、30 + "30" は連結されます。

数値文字列

JavaScriptの文字列は数字を含むことができます:

var x = 100;         // x は数です
var y = "100";       // y は文字列です

すべての数値演算では、JavaScriptは文字列を数値に変換しようとします:

この例はこのように動作します:

var x = "100";
var y = "10";
var z = x / y;       // z は 10 になります

自分で試してみてください

この例もこのように動作します:

var x = "100";
var y = "10";
var z = x * y;       // z は 1000 になります

自分で試してみてください

この例はこのように動作します:

var x = "100";
var y = "10";
var z = x - y;      // z は 90 になります

自分で試してみてください

しかし、この例では上の例のように動作しません:

var x = "100";
var y = "10";
var z = x + y;       // z は 110 ではありません(10010です)

自分で試してみてください

最後の例では、JavaScriptは+演算子で文字列を連結しました。

NaN - 非数値

NaN JavaScriptの保留語であり、ある数が合法な数でないことを示します。

非数字の文字列で除法を試みると NaN(Not a Number)が得られます:

実例

var x = 100 / "Apple";  // x は NaN(Not a Number)になります

自分で試してみてください

ただし、文字列に数値が含まれている場合、結果は数になります:

実例

var x = 100 / "10";     // x は 10 になります

自分で試してみてください

グローバルな JavaScript 関数を使用して: isNaN() ある値が数かどうかを確認するために:

実例

var x = 100 / "Apple";
isNaN(x);               // 返回 true,因为 x は数ではありません

自分で試してみてください

に注意してください NaN。数学の演算で NaN、その場合、結果も NaN

実例

var x = NaN;
var y = 5;
var z = x + y;         // z は NaN になります。

自分で試してみてください

結果は文字列結合になるかもしれません:

実例

var x = NaN;
var y = "5";
var z = x + y;         // z は NaN5 になります。

自分で試してみてください

NaN は数です、typeof NaN 返却 number

実例

typeof NaN;             // 返却値は "number"

自分で試してみてください

Infinity

Infinity (または -Infinity)はJavaScriptが数の計算で最大可能な数の範囲を超えた場合に返す値です。

実例

var myNumber = 2;
while (myNumber != Infinity) {          // Infinity まで実行します
    myNumber = myNumber * myNumber;
}

自分で試してみてください

0(ゼロ)で除算することでも、 Infinity

実例

var x =  2 / 0;          // x は Infinity になります。
var y = -2 / 0;          // y は -Infinity になります。

自分で試してみてください

Infinity は数です:typeOf Infinity 返却 number

実例

typeof Infinity;        // 返却値は "number"

自分で試してみてください

16進数

JavaScriptは接頭辞が 0x の数値定数は16進数として解釈されます。

実例

var x = 0xFF;             // x は 255 になります。

自分で試してみてください

絶対に先頭にゼロがある数字(例えば 07)を使用しないでください。

一部のJavaScriptバージョンでは、先頭にゼロがある数値を8進数として解釈します。

デフォルトで、Javascriptは数値を10進数の小数として表示します。

ただし、以下を使用することもできます toString() このメソッドは数値を16進数、8進数、または2進数に変換します。

実例

var myNumber = 128;
myNumber.toString(16);     // 返却値は 80
myNumber.toString(8);      // 返却値は 200
myNumber.toString(2);      // 返却値は 10000000

自分で試してみてください

数値はオブジェクトでもできます

通常 JavaScript 数値はリテラルで作成された原始値です:var x = 123

しかし、キーワードを使用することでも可能です new オブジェクトとして定義されています:var y = new Number(123)

実例

var x = 123;
var y = new Number(123);
// typeof x は number を返します
// typeof y は object を返します

自分で試してみてください

数値オブジェクトを作成しないでください。これにより実行速度が遅くなります。

new キーワードはコードを複雑にし、予期せぬ結果を引き起こすことがあります:

以下の方法で使用する場合: == 相等演算子を使用すると、一致する数は見た目では一致しています:

実例

var x = 500;             
var y = new Number(500);
// (x == y) は true です、なぜなら x と y が同じ値を持っているからです

自分で試してみてください

以下の方法で使用する場合: === 相等演算子の後で、一致する数が不一致になるのは、以下の理由でです: === 演算子は型と値の両方が一致する必要があります。

実例

var x = 500;             
var y = new Number(500);
// (x === y) は false です、なぜなら x と y の型が異なるからです

自分で試してみてください

さらに悪い状況です。オブジェクトは比較できない:

実例

var x = new Number(500);             
var y = new Number(500);
// (x == y) は false です、なぜならオブジェクトは比較できないからです

自分で試してみてください

JavaScript オブジェクトは比較できません。