@@ -22,11 +22,12 @@ JavaScriptでは、文字列も一度作成したら変更できないイミュ
2222オブジェクトは、一度作成した後もその値自体を変更できるためミュータブル(mutable)の特性を持ちます。
2323オブジェクトは、値そのものではなく値への参照を経由して操作されるため、参照型のデータとも言います。
2424
25- データ型を細かく見ていくと、6つのプリミティブ型とオブジェクトからなります 。
25+ データ型を細かく見ていくと、7つのプリミティブ型とオブジェクトからなります 。
2626
2727- プリミティブ型(基本型)
2828 - 真偽値(Boolean): ` true ` または` false ` のデータ型
2929 - 数値(Number): ` 42 ` や ` 3.14159 ` などの数値のデータ型
30+ - 巨大な整数(BigInt): ES2020から追加された` 9007199254740992n ` などの任意精度の整数のデータ型
3031 - 文字列(String): ` "JavaScript" ` などの文字列のデータ型
3132 - undefined: 値が未定義であることを意味するデータ型
3233 - null: 値が存在しないことを意味するデータ型
@@ -43,6 +44,7 @@ JavaScriptでは、文字列も一度作成したら変更できないイミュ
4344``` js
4445console .log (typeof true );// => "boolean"
4546console .log (typeof 42 ); // => "number"
47+ console .log (typeof 9007199254740992n ); // => "bigint"
4648console .log (typeof " JavaScript" ); // => "string"
4749console .log (typeof Symbol (" シンボル" ));// => "symbol"
4850console .log (typeof undefined ); // => "undefined"
@@ -107,7 +109,12 @@ false; // => false
107109
108110### 数値(Number){#number}
109111
110- 数値は大きく分けて` 42 ` のような整数リテラルと` 3.14159 ` のような浮動小数点数リテラルがあります。
112+ 数値には` 42 ` のような整数リテラルと` 3.14159 ` のような浮動小数点数リテラルがあります。
113+
114+ これらのリテラルで表現できる数値は[ IEEE 754] [ ] の倍精度浮動小数として扱われます。
115+ 倍精度浮動小数では64bitで数値を表現します。
116+ 64bitのうち52bitを数字の格納のために使い、11bitを小数点の位置に使い、残りの1bitはプラスとマイナスの符号です。
117+ そのため、正確に扱える数値の最大値は` 2^53-1 ` (2の53乗から1引いた値)となります。
111118
112119#### 整数リテラル {#integer-literal}
113120
@@ -189,7 +196,6 @@ console.log(0x30A2); // => 12450
189196
190197#### 浮動小数点数リテラル {#floating-point-number-literal}
191198
192- JavaScriptの浮動小数点数は[ IEEE 754] [ ] を採用しています。
193199浮動小数点数をリテラルとして書く場合には、次の2種類の表記が利用できます。
194200
195201- ` 3.14159 ` のような ` . ` (ドット)を含んだ数値
@@ -215,6 +221,40 @@ JavaScriptの浮動小数点数は[IEEE 754][]を採用しています。
2152212e8 ; // => 200000000
216222```
217223
224+ ### [ ES2020] BigInt {#Bigint-literal}
225+
226+ ` 1 ` や` 3.14159 ` などの数値リテラルは[ IEEE 754] [ ] の倍精度浮動小数であるため、正確に扱える数値の最大値は` 2^53-1 ` (2×10の53乗から1引いた値)です。
227+ この数値リテラルで安全に表せる最大の数値は` Number.MAX_SAFE_INTEGER ` として定義されています。
228+
229+ ``` js
230+ console .log (Number .MAX_SAFE_INTEGER ); // => 9007199254740991
231+ ```
232+
233+ 数値リテラルで` 2^53-1 ` (` 9007199254740991 ` )よりも大きな値を表現したり計算すると間違った結果となる場合があります。
234+
235+ この問題を解決するために、ES2020では` BigInt ` という新しい整数型のデータ型とリテラルが追加されました。
236+ 数値リテラルは倍精度浮動小数(64bit)で数値を扱うのに対して、BigIntでは任意の精度の整数を扱えます。
237+ そのため、BigIntでは` 2^53-1 ` (` 9007199254740991 ` )よりも大きな整数を正しく表現できます。
238+
239+ BigIntリテラルは、数値の後ろに` n ` をつけます。
240+
241+ {{book.console}}
242+ ```
243+ console.log(1n); // => 1n
244+ // 2^53-1より大きな値も扱える
245+ console.log(9007199254740992n); // => 9007199254740992n
246+ ```
247+
248+ BigIntは整数を扱うデータ型であるため、次のように小数点を含めた場合は構文エラーとなります。
249+
250+ <!-- textlint-disable -->
251+ <!-- doctest:SyntaxError -->
252+ ``` js
253+ 1 .2n ; // => SyntaxError
254+ ```
255+
256+ <!-- textlint-enable -->
257+
218258### 文字列(String){#string}
219259
220260文字列リテラル共通のルールとして、同じ記号で囲んだ内容を文字列として扱います。
0 commit comments