Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

数値と文字列

本章では、JavaScript で 2 つの最も基本的なデータ型、数値と文字列について説明します。その基盤となる表現と、それらを使用して作業し、計算を行うための関数について紹介します。

数値

JavaScript では、数値はすべて64 ビット倍精度浮動小数点数形式である IEEE 754 (すなわち、±2^−1022 と ±2^+1023 の間、もしくはおよそ ±10^−308 と ±10^+308 の間の数値、53 ビットの精度による) にしたがって実装されています。±2^53 − 1 までの整数は正確に表現できます。

浮動小数点数の表現に加えて、数値型は 3 つの記号的な値を持っています。Infinity-InfinityNaN(非数、not-a-number)です。

JavaScript における他のプリミティブ型との関わりについては、JavaScript のデータ型とデータ構造 もご覧ください。

4 種類の数値リテラル、10 進数、2 進数、8 進数、16 進数を使用することができます。

10 進数

js
123456789042

10 進数リテラルはゼロ (0) から始めて、それ以降に 10 進の桁を続けることが可能ですが、0 に続くすべての数値が 8 より小さい場合、その数値は 8 進数として解析されることに注意してください。これは古い構文と見なされ、0 で始まる数値リテラルは、 8 進数または 10 進数として解釈されるかどうかに関わらず、厳格モードでは構文エラーが発生します。そのため、代わりに0o 接頭辞を使用してください。

js
0888 // 10 進数として 888 と解析される0777 // 8 進数として解析され、 10 進数の 511 になる

2 進数

2 進数の構文では、先行ゼロの後に小文字または大文字の "B" を使います (0b または0B)。0b の後の数値が 0 または 1 ではない場合、SyntaxError: "Missing binary digits after 0b"(0b の後に 2 進数の桁がありません) が発生します。

js
0b10000000000000000000000000000000 // 21474836480b01111111100000000000000000000000 // 21390950400B00000000011111111111111111111111 // 8388607

8 進数

8 進数の標準的な構文は、接頭辞として0o を付けるものです。例えば次のようなものです。

js
0O755 // 4930o644 // 420

8 進数には古い構文もあります。 8 進数の前に 0 を付けるもので、0644 === 420"\045" === "%" となります。0 の後の数字が0 から7 の範囲外の場合、数値は 10 進数として解釈されます。

js
const n = 0755; // 493const m = 0644; // 420

厳格モードでは、この 8 進数構文を禁止しています。

16 進数

16 進数の構文では、先行ゼロの後に小文字または大文字の "X" を使います (0x または0X)。0x の後の数値が範囲 (0123456789ABCDEF) 外の場合、SyntaxError: "Identifier starts immediately after numeric literal" (数値リテラルの直後に識別子があります) が発生します。

js
0xFFFFFFFFFFFFFFFFF // 2951479051793528300000x123456789ABCDEF   // 819855292164869000XA                 // 10

指数表現

js
0e-5   // 00e+5   // 05e1    // 50175e-2 // 1.751e3    // 10001e-3   // 0.0011E3    // 1000

Number オブジェクト

組み込みのNumber オブジェクトは最大値、NaN、無限大といった数値定数のプロパティを持っています。これらのプロパティの値は変更できません。下記のように使用します。

js
const biggestNum = Number.MAX_VALUE;const smallestNum = Number.MIN_VALUE;const infiniteNum = Number.POSITIVE_INFINITY;const negInfiniteNum = Number.NEGATIVE_INFINITY;const notANum = Number.NaN;

常に上記のように定義済みNumber オブジェクトのプロパティを常に参照してください。自作したNumber オブジェクトのプロパティは使用しないでください。

次の表はNumber オブジェクトのプロパティの要約です。

プロパティ説明
Number.MAX_VALUE表現可能な正の最大値。(±1.7976931348623157e+308)
Number.MIN_VALUE表現可能な正の最小値。(5e-324)
Number.NaN非数を表す特別な値。
Number.NEGATIVE_INFINITY負の無限大を表す特別な値。オーバーフローした際に返されます。
Number.POSITIVE_INFINITY正の無限大を表す特別な値。オーバーフローした際に返されます。
Number.EPSILON1Number オブジェクトで表現可能な1 より大きな最小の数との差 (計算機イプシロン)。(2.220446049250313e-16)
Number.MIN_SAFE_INTEGERJavaScript で正確に扱える最小の整数値。(−2^53 + 1, or−9007199254740991)
Number.MAX_SAFE_INTEGERJavaScript で正確に扱える最大の整数値。(+2^53 − 1, or+9007199254740991)
メソッド説明
Number.parseFloat()文字列引数を解析し、浮動小数点数を返します。 グローバル関数parseFloat() と同等。
Number.parseInt()文字列引数を解析し、指定された根(基数)の整数を返します。 グローバル関数parseInt() と同等。
Number.isFinite()渡された値が有限数であるか否かを判定します。
Number.isInteger()渡された値が整数であるか否かを判定します。
Number.isNaN()渡された値がNaN(非数)であるか否かを判定します。原型となったグローバル関数isNaN() よりも強靭なバージョン。
Number.isSafeInteger()渡された値が正確に扱える整数であるか否かを判定します。

Number オブジェクトのプロトタイプは様々な形のNumber オブジェクトから情報を取得するメソッドを提供します。次表はNumber.prototype のメソッドの要約です。

メソッド説明
toExponential()数値の指数表記を表す文字列を返します。
toFixed()数値の固定小数点表記を表す文字列を返します。
toPrecision()特定の精度の固定小数点表記による数値を表す文字列を返します。

Math オブジェクト

組み込みMath オブジェクトは数学定数および数学関数のためのプロパティとメソッドを有しています。例えば、Math オブジェクトのPI プロパティは π (3.141…) の値を持ちます。以下のようにアプリケーション内で使用できます。

js
Math.PI;

同様に、標準的な数学関数がMath のメソッドにあります。数学関数には、三角関数、対数、指数、およびその他の関数が含まれます。例えば、三角関数 sin を使用したい場合、下記のように記述します。

js
Math.sin(1.56);

Math のすべての三角関数メソッドはラジアンで引数を取ることに注意してください。

次表はMath オブジェクトメソッドの要約です。

Math のメソッド
メソッド説明
abs()絶対値。
sin(),cos(),tan()標準三角関数。引数はラジアン。
asin(),acos(),atan(),atan2()逆三角関数。返値はラジアン。
sinh(),cosh(),tanh()双曲線三角関数。引数は双曲線角度。
asinh(),acosh(),atanh()逆双曲線三角関数。返値は双曲線角度。

pow(),exp(),expm1(),log(),log10(),log1p(),log2()

指数と対数関数。
floor(),ceil() 引数以下の最大の整数値、引数以上の最小の整数値を返します。
min(),max() カンマで区切られた数値リストの引数から最小値、最大値をそれぞれ返します。
random()0 から 1 の間のランダムな数値を返します。
round(),fround(),trunc(),丸めと切り捨て関数。
sqrt(),cbrt(),hypot() 平方根、立方根、引数の二乗の和の平方根を返す。
sign() 数の符号、すなわち数が正、負またはゼロかどうかを返します。
clz32(),
imul()
32 ビットのバイナリー表現にした場合の先行ゼロの個数を返す関数。
2 つの引数を C 言語のように 32 ビット乗算した結果を返す関数。

他の多くのオブジェクトとは異なり、決して独自のMath オブジェクトを生成しないでください。常にビルトインMath オブジェクトを使用してください。

長整数

数値の欠点のひとつは、 64 ビットしか存在しないことです。実際には、 IEEE 754 エンコード方式を使用しているため、Number.MAX_SAFE_INTEGER (253 - 1) よりも大きな整数を正確に表すことができません。バイナリーデータをエンコードする必要があること、また、i64 (64 ビット整数)やi128 (128 ビット整数)のような幅広い整数をサポートする他の言語と相互運用する必要があることから、 JavaScript では任意の大きな整数を表す別のデータ型である長整数 (BigInt) も提供しています。

長整数は、n を接尾辞とする整数リテラルとして定義することができます。

js
const b1 = 123n;// 好きなだけ大きくできる。const b2 = -1234567890987654321n;

長整数は、BigInt コンストラクターを使用して数値または文字列値から構築することもできます。

js
const b1 = BigInt(123);// 文字列を使用することで、精度の低下を防ぐことができる。// 長い数値リテラルは、そのように見えるものを表してとは限らない。const b2 = BigInt("-1234567890987654321");

概念的には、長整数は整数をエンコードする任意の長さのビット列です。精度を失うことなく、またオーバーフローやアンダーフローを起こすことなく、あらゆる算術演算を安全に行うことができます。

js
const integer = 12 ** 34; // 4.9222352429520264e+36、精度のみで制約されるconst bigint = 12n ** 34n; // 4922235242952026704037113243122008064n

数値と比較すると、長整数の値は大きな整数を表す際に高い精度を実現します。しかし、浮動小数点数を表すことはできません。例えば、割り算はゼロに丸められます。

js
const bigintDiv = 5n / 2n; // 2n。長整数には 2.5 がない

Math 関数は長整数値では使用できません。長整数値が利用できるように、Math.max() のような特定のMath 関数をオーバーロードするための公開提案があります。

長整数と数値のどちらかを選ぶかは、用途と入力の範囲によって決まります。数値の精度は、すでにほとんどの日常的な課題に対応できるはずです。また、長整数はバイナリーデータを処理するのに最も適しています。

長整数値でできることについては、「式と演算子」の章またはBigInt リファレンスを参照してください。

文字列

JavaScript の文字列型は、テキストデータを表すために使われます。テキストデータ型は 16 ビット符号なし整数値 (UTF-16) からなる「要素」の集合体です。文字列の各要素は、その文字列内で所定の位置を占めています。最初の要素のインデックスは 0 で、次の要素のインデックスは 1 、といった具合に。文字列の長さはその要素数となります。文字列リテラルか文字列オブジェクトを使用して文字列を生成できます。

文字列リテラル

単一引用符または二重引用符のいずれかを使用して、単純な文字列を作成できます。

js
'foo'"bar"

文字列リテラル内では、ほとんどの文字は文字通りに入力できます。 例外は、バックスラッシュ(\、エスケープシーケンスを始める)、文字列を囲むために使用されている引用符文字(文字列を終了する)、およびバックスラッシュが前になければ構文エラーとなる改行文字だけです。

エスケープシーケンスを使用して、より高度な文字列を作成することができます。

16 進数エスケープシーケンス

\x の後の数値は16 進法による数として解釈されます。

js
"\xA9" // "©"

Unicode エスケープシーケンス

Unicode エスケープシーケンスは\u の後に少なくとも文字が 4 個必要です。

js
"\u00A9" // "©"

Unicode コードポイントエスケープ

Unicode コードポイントエスケープを使えば、どんな文字でも 16 進数を使用してエスケープすることができます。これにより、0x10FFFF まで Unicode コードポイントを利用できます。単純な Unicode エスケープを使用して同じ結果を得るには、多くの場合要素を半分に分け、サロゲートペアにする必要があります。

String.fromCodePoint()String.prototype.codePointAt() も参考にしてください。

js
"\u{2F804}"// 単純な Unicode エスケープでも同じです。"\uD87E\uDC04"

String オブジェクト

文字列値に対して直接メソッドを呼び出すことができます。

js
console.log("hello".toUpperCase()); // HELLO

以下のメソッドが文字列 (String) 値で利用できます。

文字列を操作する際に、文字列操作に重要な機能を提供して指定された他の 2 種類のオブジェクトがあります。RegExpIntl です。これらはそれぞれ、正規表現国際化で導入されています。

テンプレートリテラル

テンプレートリテラルは式を埋め込むことができる文字列リテラルです。複数行の文字列や文字列の補間機能を使用することができます。

テンプレートリテラルは二重引用符または一重引用符のかわりにバッククォート (`) (抑音アクセント)文字で囲まれています。テンプレートリテラルにはプレースホルダーを含めることができます。プレースホルダーはドル記号と中括弧 (${expression}) によって示されます。

複数行

ソースに挿入された、あらゆる改行文字はテンプレートリテラルの一部となります。通常の文字列を使って複数行の文字列を取得するには、次のような構文を使用しなければなりません。

js
console.log(  "文字列のテキスト行 1\n\文字列のテキスト行 2",);// "文字列のテキスト行 1// 文字列のテキスト行 2"

複数行の文字列と同じ結果を得たければ、次のように書くことができます。

js
console.log(`文字列のテキスト行 1文字列のテキスト行 2`);// "文字列のテキスト行 1// 文字列のテキスト行 2"

組み込み式

通常の文字列内に式を埋め込むには、次のような構文を用います。

js
const five = 5;const ten = 10;console.log(  "Fifteen is " + (five + ten) + " and not " + (2 * five + ten) + ".",);// "Fifteen is 15 and not 20."

テンプレートリテラルを使えば、糖衣構文を利用してこれをより読みやすくすることができます。

js
const five = 5;const ten = 10;console.log(`Fifteen is ${five + ten} and not ${2 * five + ten}.`);// "Fifteen is 15 and not 20."

詳細については、JavaScript リファレンス内のテンプレートリテラルをご覧ください。

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp