「JavaScript/数値」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
M編集の要約なし
タグ: ビジュアルエディター モバイル編集 モバイルウェブ編集
Ef3 (トーク | 投稿記録)
+Infinity
1 行
{{Nav}}
'''数値'''(すうち、''number'')は[[w:数|数]]、すなわち数量を表す概念'''プリミティブ値'''です。
[[JavaScript/Number|Numberオブジェクト]]は数値プリミティブ数値に対応するラッパオブジェクトです。
 
== 概要 ==
JavaScriptでは数として値を浮動小数点数サポートされています(ここでは数値と長整数は別のものとして扱います)
浮動小数点数とは実数のコンピュータによで用いられ実数の近似です。[[w:IEEE 754|IEEE 754]]の[[w:倍精度浮動小数点数|64ビット倍精度浮動小数点数]]が使われます。
 
=== 数値リテラル ===
プログラミング言語における整数の表記法を'''整数リテラル'''(せいすうリテラル、''integer literal'')、浮動小数点数の表記法を'''浮動小数点リテラル'''(ふどうしょうすうてんリテラル、''floating point literal'')といいます。
一方、浮動小リテラル(''Numeric literal'')は次のような形をしています。
 
<source lang="js">
=== 整数 ===
42
整数リテラルは次のような形をしています<ref>JavaScriptでは整数も内部では64ビット倍精度浮動小数点数として扱われます。</ref>。
42.0 // 上と同じ値
 
-1
* <code>42</code>
0
* <code>-1</code>
864e5
* <code>0</code>
0xFFFF
* <code>864e5</code>
</source>
* <code>0xFFFF</code>
 
いずれもふつうの整数ですが、<code>864e5</code>というのは科学的表記法で<math>864 \times 10^5</math>(<math>= 8.64 \times 10^7</math>)、すなわち<code>86400000</code>に等しい数値です。<code>0xFFFF</code>というのは十六進法による表示で、十進法の<code>65535</code>に等しい数値です。JavaScriptにおいて<code>0xFFFF</code>と<code>65535</code>はまったく同じ数値として扱われます(ただし、文字列に変換した場合はこの限りではありません)。
 
<code>864e5</code>というのは科学的表記法で<math>864 \times 10^5</math>(<math>= 8.64 \times 10^7</math>)、すなわち<code>86400000</code>に等しい数値です。
<code>0xFFFF</code>というのは十六進法による表示で、十進法の<code>65535</code>に等しい数値です。
JavaScriptにおいて<code>0xFFFF</code>と<code>65535</code>はまったく同じ数値です。
JavaScriptには二進法や八進法の整数リテラルはありませんでしたが、ECMA-262第6版で導入されました。
 
<source lang="js">
* <code>0b1101</code> ⇒ 13
0b1101 // 13
* <code>0o3162</code> ⇒ 1650
0o3162 // 1650
</source>
 
二進法の整数リテラルは <code>0b</code>(あるいは<code>0B</code>)を前置し、八進法の整数リテラルは<code>0o</code>(あるいは<code>0o</code>)を前置します<ref> [https://www.ecma-international.org/ecma-262/#sec-literals-numeric-literals ECMA-262 6th Edition 11.8.3 Numeric Literals]</ref>。
<code>0</code>だけを前置する八進法の整数リテラルは過去にサポートされていましたがECMA-262第3版で削除されました。多くの処理系では後方互換のために依然として八進法の整数リテラルをサポートしていますが、非推奨とされ[[JavaScript/strictモード|strictモード]]に於てはエラーになります。
 
数値リテラルに区切り文字としての '_' 使う形式が、ES2021で導入されました<ref>[https://github.com/tc39/proposal-numeric-separator tc39/proposal-numeric-separator: A proposal to add numeric literal separators in JavaScript.]</ref>。
 
<source lang="js">
* <code>1_234_567</code>
1_234_567
* <code>2_3_5_7_11</code>
2_3_5_7_11
</source>
 
使うかどうかは任意で、3桁ごとに置くなどの制限はありません。
数値の、先頭に '_' を置くと識別子になってしまいます。
数値の末尾に '_' を置くと SysnatxError となります。
'_' を2つ以上続けても SysnatxError となります。
 
<source lang="js">
=== 浮動小数 ===
0.5
一方、浮動小数点リテラルは次のような形をしています。
.5 // 上と同じ値
 
* <code>-1.4142135623730951</code>
* <code>0.5</code>
* <code>3.141592653589793</code>
* <code>.5</code>
1.0e-8
* <code>-1.4142135623730951</code>
</source>
* <code>3.141592653589793</code>
* <code>1.0e-8</code>
 
<code>1.0e-8</code>は<math>1.0 \times 10^{-8}</math>、すなわち<code>0.00000001</code>と等しい数値です。
小数点を伴った数値リテラルは、10進数に限られそれ以外の基数で小数点をつもなうと Syntax Error になります。
 
== 整数と浮動小数点数は区別されない ==
JavaScriptの数値は [[w:IEEE 754|IEEE 754]] の[[w:倍精度浮動小数点数|64ビット倍精度浮動小数点数]]です。
 
64ビット倍精度浮動小数点数で精度が落ちることなく整数を表現できる最小値と最大値は、それぞれ [[JavaScript/Number|Number]].MIN_SAFE_INTEGER と Number.MAX_SAFE_INTEGER で提供されます。
 
typeof 演算子を数値に適用すると値に関係なく "number" を返します。
数値が(精度が失われているにしても)整数であるかは Number.isInteger(number)で、精度を失っていない整数であるかは Number.isSafeInteger(number) で調べることが出来ます。
60 ⟶ 66行目:
しかし JavaScript の数は倍精度の64ビットの浮動小数しかなく整数型は浮動小数の仮数部を使って表現されます。
 
これはプリミティブな「数」の場合で、BigIntやTypedArrayは異なる内部構造を持っています。}}
 
== 種々雑多数値の取り得る特殊知識 ==
=== NaN ===
: ''「{{See|[[JavaScript/NaN|NaN]]」も参照''}}
'''NaN'''(ナン、'''''N'''ot '''a''' '''N'''umber''、非数、ひすう)とは、数値に変換できない文字列を数値に変換しようとしたり、数値演算に不正なパラメータが与えられたり、計算結果が一意に定まないなど異常を表す特殊な値です。[[w:IEEE 754|IEEE 754]]の NaN へのインターフェースで、グローバルオブジェクトの静的プロパティ NaN として参照できます。
 
=== NumberInfinity ===
{{See also|[[JavaScript/NumberInfinity|NumberInfinity]]}}
'''Infinity'''(インフィニティ、無限大、むげんだい)とは、典型的には演算結果がオーバーフローした時に取る値で、セロ除算でも生成されます。
[[w:IEEE 754|IEEE 754]]の Infinity へのインターフェースで、グローバルオブジェクトの静的プロパティ Infinity として参照できます。
 
=== Numberオブジェクト ===
{{See|[[JavaScript/Number|Number]]}}
'''Number'''オブジェクトはJavaScriptのプリミティブ型である数値型をラップします。Numberコンストラクタに数値として解釈できないオブジェクト(たとえば <code>"A"</code> などの文字列)を渡すと、<code>NaN</code>を返します。
 
94 ⟶ 105行目:
<source lang="javascript">var two = Number("2");</source>
 
==== 静的プロパティ ====
{{See|[[JavaScript/Number#静的プロパティ|Number#静的プロパティ]]}}
 
; [[{{PAGENAME}}/MAX_VALUE|MAX_VALUE]]
: JavaScriptで表すことのできる最大の数
108 ⟶ 121行目:
: Numberオブジェクトのプロトタイプ
 
==== 静的メソッド ====
{{See|[[JavaScript/Number|Number#静的メソッド]]}}
 
; toExponential(fractionDigits=undefined)
; toFixed(digits=0)