数値リテラル

構文の説明

JavaScriptにおけるリテラルの意味

用語辞書的な意味プログラミング上の意味
リテラル
(literal)
文字どおりの、そのままのプログラム中に直接記述された固定値
console.log(100); //100がリテラル(数値リテラル)

リテラルの種類

リテラルの種類
数値リテラルnumber10、-50
文字列リテラルstring"hello"、"10"
真偽値リテラルbooleantrue、false
nullリテラルobjectnull
undefinedリテラルundefinedundefined

数値リテラルの種類

種類接頭辞値の例10進数での値
10進数123123
2進数0b0b101010
8進数0o0o755493
16進数0x0xFF255

例題

次のコードをコンソールでどのように表示されるか確認してみましょう。

console.log(10);

10

console.log(typeof リテラル);でそのリテラルの型が確認できます。

console.log(typeof 10); //出力結果:number

問題

次のコードをコンソールでどのように表示されるか確認してみましょう。

console.log(100);

100

console.log(3.14);

3.14

console.log(-50);

-50

console.log(0b101011);

43

接頭辞0bを付けると2進数として扱われます。

console.log(0xffff);

65535

接頭辞0xを付けると16進数として扱われます。

console.log(0o777);

511

接頭辞0oを付けると8進数として扱われます。

console.log(0o888);

SyntaxError

接頭辞0oをつけると、その数値は8進数として扱われます。
8進数では 0〜7 までしか使用できないため、それ以外の数字を含めるとSyntaxError(構文エラー)となります。
同様に以下の場合でも構文エラーとなります。

console.log(1.2.3); //10進数で小数点を2つ以上使用
console.log(1000F); //10進数で0~9以外を使用
console.log(0b102); //2進数で0、1以外を使用
console.log(0xF1G); //16進数で0~F以外を使用
console.log(1_000_000);

1000000

_(アンダースコア)は桁区切りとして使用できます。
3桁区切りに限らず、任意の位置で区切ることができます(ただし一般的な使い方ではありません)

console.log(1_0_0_0); //出力結果:1000
console.log(9007199254740991);
console.log(9007199254740992);
console.log(9007199254740993);
console.log(9007199254740994);
console.log(9007199254740995);

9007199254740991
9007199254740992
9007199254740992
9007199254740994
9007199254740996

数値(Number)で扱える限界は9007199254740991です。これを超えると数値を正確に表現できなくなります。
9007199254740991を超える大きな整数を扱うときは、BigIntを使います。

console.log(9007199254740992n);
console.log(9007199254740993n);
console.log(9007199254740994n);
console.log(9007199254740995n);

9007199254740992n
9007199254740993n
9007199254740994n
9007199254740995n

9007199254740991を超える大きな整数を扱うときは、接尾辞nを付けることでBigIntとして扱うことができます。数値型では正確に表現できない大きな値(整数)も扱えます。
ただし、数値型と型が異なるため、数値型とBigInt型を混ぜて計算できません。

console.log(typeof 9007199254740992n); //出力結果:bigint
console.log(3.14n); //SyntaxError(BigIntは整数のみ扱えるため、小数は使用不可)
console.log(10 + 10); //出力結果:20
console.log(10n + 10); //TypeError(BigIntとNumberは混在できない)