JavaScript 数値
目次
JavaScript の数値型
JavaScript には一つの数値型しかありません。数値は小数点を伴うか伴わないかで書くことができます。
let x = 3.14; // 小数点ありの数値
let y = 3; // 小数点なしの数値
特大または特小の数値
科学的(指数)表記で特大または特小の数値を書くことができます:
let x = 123e5; // 12300000
let y = 123e-5; // 0.00123
JavaScript 数値は常に64ビット浮動小数点
他の多くのプログラミング言語とは異なり、JavaScript は整数、短整数、長整数、浮動小数点など、異なるタイプの数値を定義しません。
JavaScript の数値は常に国際的な IEEE 754 標準に従った倍精度浮動小数点数として保存されます。
このフォーマットでは、数値(分数)はビット 0 から 51 までに、指数はビット 52 から 62 までに、符号はビット 63 に保存されます:
整数の精度
整数(ピリオドや指数表記のない数値)は、15桁まで正確です。
let x = 999999999999999; // x は 999999999999999 になります
let y = 9999999999999999; // y は 10000000000000000 になります
浮動小数点の精度
浮動小数点演算は常に100%正確ではありません:
let x = 0.2 + 0.1;
上記の問題を解決するために、乗算と除算が役立ちます:
let x = (0.2 * 10 + 0.1 * 10) / 10;
数値と文字列の追加
注意: JavaScript は + 演算子を追加と連結の両方に使用します。
数値を追加すると、結果は数値になります:
let x = 10;
let y = 20;
let z = x + y;
文字列を追加すると、結果は文字列の連結になります:
let x = "10";
let y = "20";
let z = x + y;
数値と文字列を追加すると、結果は文字列の連結になります:
let x = 10;
let y = "20";
let z = x + y;
文字列と数値を追加すると、結果は文字列の連結になります:
let x = "10";
let y = 20;
let z = x + y;
以下の結果が30になると期待するのは一般的な間違いです:
let x = 10;
let y = 20;
let z = "The result is: " + x + y;
以下の結果が102030になると期待するのは一般的な間違いです:
let x = 10;
let y = 20;
let z = "30";
let result = x + y + z;
JavaScript インタープリターは左から右に作業を行います。
最初に x と y が数値であるため、10 + 20 が追加されます。
次に z が文字列であるため、30 + “30” が連結されます。
数値文字列
JavaScript の文字列には数値の内容が含まれることがあります:
let x = 100; // x は数値です
let y = "100"; // y は文字列です
JavaScript は、すべての数値演算において文字列を数値に変換しようとします:
これは動作します:
let x = "100";
let y = "10";
let z = x / y;
これも動作します:
let x = "100";
let y = "10";
let z = x * y;
そしてこれも動作します:
let x = "100";
let y = "10";
let z = x - y;
しかし、これは動作しません:
let x = "100";
let y = "10";
let z = x + y;
最後の例では JavaScript は + 演算子を使用して文字列を連結します。
NaN – Not a Number
NaN は JavaScript の予約語であり、数値が正当な数値ではないことを示します。
非数値の文字列で算術演算を試みると、NaN(Not a Number)になります:
let x = 100 / "Apple";
ただし、文字列が数値であれば、結果は数値になります:
let x = 100 / "10";
値が NaN であるかどうかを知るために、グローバル JavaScript 関数 isNaN() を使用できます:
let x = 100 / "Apple";
isNaN(x);
NaN に注意してください。NaN を数学的な操作で使用すると、結果も NaN になります:
let x = NaN;
let y = 5;
let z = x + y;
または、NaN5 のような連結になる可能性があります:
let x = NaN;
let y = "5";
let z = x + y;
NaN は数値です: typeof NaN は number を返します:
typeof NaN;
Infinity
Infinity(または -Infinity)は、JavaScript が最大の可能な数を超えて計算した場合に返す値です。
let myNumber = 2;
// 無限に実行
while (myNumber != Infinity) {
myNumber = myNumber * myNumber;
}
0(ゼロ)での除算も Infinity を生成します:
let x = 2 / 0;
let y = -2 / 0;
Infinity は数値です: typeof Infinity は number を返します。
typeof Infinity;
16進数
JavaScript は、16進数で数値定数を解釈します。これには 0x が先行する必要があります。
let x = 0xFF;
0 の先頭にゼロを付けて数値を書くことは絶対にしません(例:07のように)。
一部の JavaScript のバージョンでは、先頭にゼロを付けることで 8進数として数値を解釈します。
デフォルトでは JavaScript は数値を 10進数の小数点表示として表示します。
ただし、toString() メソッドを使用して、2進数から36進数までの数値を出力することができます。
16進数は基数16です。10進数は基数10です。8進数は基数8です。2進数は基数2です。
let myNumber = 32;
myNumber.toString(32);
myNumber.toString(16);
myNumber.toString(12);
myNumber.toString(10);
myNumber.toString(8);
myNumber.toString(2);
JavaScript 数値をオブジェクトとして
通常、JavaScript の数値はリテラルから生成されるプリミティブ値です:
let x = 123;
しかし、数値はキーワード new を使用してオブジェクトとして定義することもできます:
let y = new Number(123);
例
let x = 123;
let y = new Number(123);
Number オブジェクトを作成しないでください。
new キーワードはコードを複雑にし、実行速度を遅くします。
Number オブジェクトは予期しない結果を生じることがあります:
== 演算子を使用すると、x と y は等しいです:
let x = 500;
let y = new Number(500);
=== 演算子を使用すると、x と y は等しくありません。
let x = 500;
let y = new Number(500);
(x==y) は true または false ですか?
let x = new Number(500);
let y = new Number(500);
(x===y) は true または false ですか?
let x = new Number(500);
let y = new Number(500);
2つの JavaScript オブジェクトを比較すると、常に false が返されます。