JavaScript の値は常に特定の型になります。たとえば、文字列や数値などです。
JavaScript には 8 つの基本的なデータ型があります。ここではそれらを一般的に説明し、次の章でそれぞれについて詳しく説明します。
変数には任意の型を入れることができます。たとえば、変数はある時点では文字列であり、その後は数値を格納することができます。
// エラーはありません let message = "こんにちは"; メッセージ = 123456;
このようなことを可能にする JavaScript などのプログラミング言語は「動的型付け」と呼ばれます。これは、データ型は存在しますが、変数はそれらのいずれにもバインドされないことを意味します。
n = 123 とします。 n = 12.345;
数値タイプは、整数と浮動小数点数の両方を表します。
数値には、乗算*
、除算/
、加算+
、減算-
など、多くの演算があります。
通常の数値のほかに、このデータ型に属するいわゆる「特殊な数値」もあります: Infinity
、 -Infinity
、 NaN
。
Infinity
数学的な無限大 ∞ を表します。これは、どの数値よりも大きい特別な値です。
ゼロ除算の結果としてそれを取得できます。
アラート( 1 / 0 ); // 無限大
または、直接参照するだけです。
アラート(無限大); // 無限大
NaN
計算エラーを表します。これは、次のような誤ったまたは未定義の数学演算の結果です。
alert( "数値ではありません" / 2 ); // NaN、そのような割り算は誤りです
NaN
粘着性があります。 NaN
に対するそれ以上の数学演算はNaN
を返します。
アラート( NaN + 1 ); // NaN アラート( 3 * NaN ); // NaN alert( "数値ではありません" / 2 - 1 ); // NaN
したがって、数式のどこかにNaN
がある場合、それは結果全体に伝播します (例外は 1 つだけあります: NaN ** 0
is 1
)。
数学的演算は安全です
JavaScript では計算を行うのは「安全」です。ゼロで割る、数値以外の文字列を数値として扱うなど、何でもできます。
スクリプトは致命的なエラー (「ダイ」) で停止することはありません。最悪の場合、結果としてNaN
が得られます。
特殊な数値は、正式には「数値」タイプに属します。もちろん、これらはこの言葉の一般的な意味での数字ではありません。
数値の操作については、「数値」の章で詳しく説明します。
JavaScript では、「数値」型は(2 53 -1)
より大きい整数値 (つまり9007199254740991
)、または-(2 53 -1)
より小さい負の整数値を安全に表すことができません。
正確に言うと、「数値」型はより大きな整数 (最大1.7976931348623157 * 10 308
) を格納できますが、安全な整数範囲±(2 53 -1)
の外では、すべての桁が適合するわけではないため、精度エラーが発生します。固定の 64 ビット ストレージに保存されます。したがって、「おおよその」値が保存される場合があります。
たとえば、次の 2 つの数値 (安全範囲のすぐ上) は同じです。
コンソール.ログ(9007199254740991 + 1); // 9007199254740992 コンソール.ログ(9007199254740991 + 2); // 9007199254740992
いわば、 (2 53 -1)
より大きいすべての奇数整数は、「数値」型にはまったく格納できません。
ほとんどの場合、 ±(2 53 -1)
の範囲で十分ですが、暗号化やマイクロ秒精度のタイムスタンプなど、非常に大きな整数の範囲全体が必要になる場合もあります。
BigInt
型は、任意の長さの整数を表すために最近言語に追加されました。
BigInt
値は、整数の末尾にn
追加することで作成されます。
// 最後の「n」は BigInt であることを意味します const bigInt = 1234567890123456789012345678901234567890n;
BigInt
数値が必要になることはほとんどないため、ここでは説明しませんが、BigInt の別の章を割いて説明します。大きな数字が必要なときに読んでください。
JavaScript の文字列は引用符で囲む必要があります。
let str = "こんにちは"; let str2 = '一重引用符も使用できます'; letphrase = `別の ${str}` を埋め込むことができます。
JavaScript には 3 種類の引用符があります。
二重引用符: "Hello"
。
一重引用符: 'Hello'
。
バッククォート: `Hello`
。
二重引用符と一重引用符は「単純な」引用符です。 JavaScript では、これらに実質的な違いはありません。
バックティックは「拡張機能」の引用符です。これらを使用すると、変数や式を${…}
でラップすることで文字列に埋め込むことができます。次に例を示します。
name = "ジョン" とします。 // 変数を埋め込む alert( `こんにちは、${name}!` ); // こんにちは、ジョン! // 式を埋め込む alert( `結果は ${1 + 2}` ); // 結果は 3 です
${…}
内の式が評価され、結果が文字列の一部になります。そこには、 name
などの変数、 1 + 2
などの算術式、またはより複雑なものなど、何でも入れることができます。
これはバッククォートでのみ実行できることに注意してください。他の引用にはこの埋め込み機能がありません。
alert( "結果は ${1 + 2}" ); // 結果は ${1 + 2} (二重引用符は何もしません)
文字列については、「文字列」の章でさらに詳しく説明します。
キャラクタータイプはありません。
一部の言語では、単一の文字に対して特別な「文字」タイプが存在します。たとえば、C 言語や Java では「char」と呼ばれます。
JavaScript にはそのような型はありません。型はstring
の 1 つだけです。文字列は、0 文字 (空)、1 文字、または多数の文字で構成されます。
ブール型にはtrue
とfalse
2 つの値のみがあります。
この型は一般に、yes/no 値を格納するために使用されます。true true
「はい、正しい」を意味し、 false
「いいえ、不正確」を意味します。
例えば:
nameFieldChecked = true にします。 // はい、名前フィールドがチェックされています ageFieldChecked = false にします。 // いいえ、年齢フィールドはチェックされません
ブール値も比較の結果として得られます。
isGreater = 4 > 1; とします。 アラート( isGreater ); // true (比較結果は「はい」)
ブール値については、論理演算子の章でさらに詳しく説明します。
特別なnull
値は、上記のどのタイプにも属しません。
これは、 null
値のみを含む独自の別の型を形成します。
年齢 = null にしてください。
JavaScript では、 null
他の言語のような「存在しないオブジェクトへの参照」や「null ポインタ」ではありません。
これは、「何もない」、「空」、または「値が不明」を表す単なる特別な値です。
上記のコードは、 age
が不明であることを示しています。
特別な値undefined
も際立っています。 null
と同様に、独自の型を作成します。
undefined
の意味は「値が割り当てられていない」です。
変数が宣言されていても代入されていない場合、その値はundefined
なります。
老化させてください。 アラート(年齢); // 「未定義」を表示します
技術的には、変数に明示的にundefined
を代入することが可能です。
年齢 = 100 とします。 // 値を未定義に変更します 年齢 = 不定; アラート(年齢); // "未定義"
…しかし、それはお勧めしません。通常、 null
使用して変数に「空」または「不明」の値を割り当てますが、 undefined
割り当てられていないものに対するデフォルトの初期値として予約されています。
object
種類が特殊です。
他のすべての型は、その値に 1 つのもの (文字列、数値、その他) しか含めることができないため、「プリミティブ」と呼ばれます。対照的に、オブジェクトはデータのコレクションやより複雑なエンティティを保存するために使用されます。
それほど重要なものであるため、オブジェクトは特別な扱いを受けるべきです。これらについては、プリミティブについて詳しく学習した後、「オブジェクト」の章で扱います。
symbol
タイプは、オブジェクトの一意の識別子を作成するために使用されます。完全を期すためにここで言及する必要がありますが、オブジェクトがわかるまで詳細は延期する必要があります。
typeof
演算子はオペランドの型を返します。これは、異なる型の値を異なる方法で処理したい場合や、単に簡単なチェックを行いたい場合に便利です。
typeof x
を呼び出すと、次の型名の文字列が返されます。
typeof un 未定義 // "未定義" typeof 0 // "数値" typeof 10n // "bigint" typeof true // "ブール値" typeof "foo" // "文字列" typeof Symbol("id") // "シンボル" typeof Math // "オブジェクト" (1) typeof null // "オブジェクト" (2) アラートの種類 // "関数" (3)
最後の 3 行については追加の説明が必要な場合があります。
Math
数学的演算を提供する組み込みオブジェクトです。それについては「民数」の章で学びます。ここでは、それはオブジェクトの一例としてのみ機能します。
typeof null
の結果は"object"
です。これはtypeof
の公式に認められたエラーで、JavaScript の非常に初期の頃に発生し、互換性のために保持されています。確かに、 null
はオブジェクトではありません。これは、独自の別のタイプを持つ特別な値です。ここでのtypeof
の動作は間違っています。
alert
は関数であるため、 typeof alert
の結果は"function"
になります。次の章では関数について学び、JavaScript には特別な「関数」タイプがないことも説明します。関数はオブジェクト タイプに属します。ただし、 typeof
それらを別の方法で処理し、 "function"
を返します。これも JavaScript の初期の時代から来ています。技術的には、このような動作は正しくありませんが、実際には便利な場合があります。
typeof(x)
構文
別の構文typeof(x)
に遭遇することもあります。 typeof x
と同じです。
明確に言うと、 typeof
演算子であり、関数ではありません。ここのかっこはtypeof
の一部ではありません。これは数学的なグループ化に使用される括弧の一種です。
通常、このような括弧には(2 + 2)
などの数式が含まれますが、ここでは引数(x)
1 つだけ含まれています。構文的には、 typeof
演算子とその引数の間のスペースを避けることができ、これを好む人もいます。
typeof x
構文の方がはるかに一般的ですが、 typeof(x)
を好む人もいます。
JavaScript には 8 つの基本的なデータ型があります。
7 つのプリミティブ データ型:
整数または浮動小数点など、あらゆる種類の数値の場合はnumber
使用します。整数は±(2 53 -1)
によって制限されます。
任意の長さの整数の場合はbigint
。
文字列にはstring
。文字列には 0 個以上の文字を含めることができますが、個別の単一文字タイプはありません。
true
/ false
を表すboolean
。
不明な値の場合はnull
– 単一の値null
を持つスタンドアロン型。
undefined
未割り当ての値の場合 – 単一の値undefined
を持つスタンドアロン型。
一意の識別子のsymbol
。
そして、1 つの非プリミティブ データ型:
より複雑なデータ構造の場合はobject
。
typeof
演算子を使用すると、変数にどの型が格納されているかを確認できます。
通常はtypeof x
として使用されますが、 typeof(x)
も可能です。
"string"
のような、型の名前を含む文字列を返します。
null
の場合、 "object"
が返されます。これは言語のエラーであり、実際にはオブジェクトではありません。
次の章では、プリミティブな値に焦点を当て、それらに慣れてきたら、オブジェクトに進みます。
重要度: 5
スクリプトの出力は何ですか?
名前を「イリヤ」にします; アラート( `こんにちは ${1}` ); //? alert( `hello ${"name"}` ); //? alert( `hello ${name}` ); //?
バッククォートは、 ${...}
内の式を文字列に埋め込みます。
名前を「イリヤ」にします; // 式は数値 1 です アラート( `こんにちは ${1}` ); // こんにちは 1 // 式は文字列「name」です alert( `hello ${"name"}` ); // こんにちは名前 // 式は変数なので埋め込みます alert( `hello ${name}` ); // こんにちは、イリヤ