JScript の変数

すべてのプログラム言語では、概念を調べるためにデータが使用されます。

How old am I?

JScript では、変数はその概念に付けた名前であり、インスタンスでの値を表します。変数を使用する場合、実際にはその変数が表すデータを使用しています。次に例を示します。

NumberOfDaysLeft = EndDate – TodaysDate;

機械的に変数を使用して、スクリプト内に表示されるすべての異なる値を保存、取得、および操作できます。変数によって表される値や内容を把握しやすい名前を作成すること、スクリプト内で実際に変数を使用する際に理解しやすく便利です。

変数の宣言

変数は、宣言としてスクリプトの最初に表示されます。このように変数を最初に宣言することによってメモリに設定されるため、スクリプト内で後から参照することができます。変数は使用する前に宣言するのが一般的です。宣言には、var キーワードを使用します。

var count;  // 単一の宣言です。
var count, amount, level;  // 1 つの var キーワードで複数の宣言をします。
var count = 0, amount = 100;  // 1 つのステートメントで変数宣言と初期化を行います。

var ステートメントで初期化を実行しなかった場合、変数は自動的に undefined に設定されます。JScript では、宣言ステートメントから var キーワードを省略することが許されていますが、このような構文には安全性の面で問題があります。宣言で var キーワードを省略すると、変数の被参照可能範囲は JScript のインタープリタによってグローバル スコープに設定されます。プロシージャ レベルで変数を宣言する場合、グローバル スコープでの参照が可能なよう設定することはありません。このような場合は、var キーワードを使用して変数宣言を行う必要があります。

変数の名前付けの制限

変数名は、識別子として使用されます。JScript では、次のような目的で識別子を使用できます。

  • 変数の名前付け
  • 関数の名前付け
  • for ループのラベル付け

JScript では、大文字と小文字は区別されます。したがって、変数名 myCounter は、変数名 MYCounter とは異なるものとして識別されます。変数名の長さに制限はありません。次に、変数を作成する場合の規則を示します。

  • 先頭文字は、ASCII 文字 (大文字でも小文字でもかまいません)、またはアンダースコア (_) 文字にします。先頭文字として数値を使用することはできません。
  • 2 文字目以降の文字には、英字、数字、アンダースコア (_) を使用できます。
  • 予約語は変数名に使用できません。

有効な変数名の例を次に示します。

_pagecount 
Part9 
Number_Items 

無効な変数名の例を次に示します。

99Balloons // 先頭に数字を使用することはできません。
Smith&Wesson // アンパサンド (&) は、変数名には使用できません。

変数を宣言して初期化し、特定の値を指定しない場合は、JScript の値に null を代入します。次に例を示します。

var bestAge = null;
var muchTooOld = 3 * bestAge; // muchTooOld の値には 0 が格納されます。

何も値を代入しないで変数を宣言することもできます。ただし、JScript の値は undefined になります。次に例を示します。

var currentCount;
var finalCount = 1 * currentCount; // currentCount は未定義の状態なので、finalCount の値には NaN が格納されます。

JScript における null と undefined の主な違いは、null は数値の 0 のように動作するのに対して、undefined は特殊な値 NaN (非数 : Not a Number) のように動作する点です。null 値と undefined 値は、通常、等しい値として扱われます。

宣言ステートメント内で var キーワードを使用しないで変数を宣言し、値を代入することもできます。これを暗黙の宣言と呼びます。

noStringAtAll = ""; // 変数 noStringAtAll は、暗黙のうちに宣言されたことになります。

宣言されていない変数を参照することはできません。

var volume = length * width; // エラーです。length および width はまだ宣言されていません。

型の自動変換

JScript インタープリタでは、オペランドのデータ型が同じ場合にだけ式を評価できます。型の自動変換をせずに、2 つの異なるデータ型 (数値と文字列など) で演算を実行しようとする式では、エラーが発生します。しかし、JScript にはこのような制限はありません。

JScript は、型に関する制限の緩やかな言語です。C++ のような型に関する制限の厳しい言語と違い、変数にはあらかじめ決められた型はありません。その代わり、JScript の変数には、その変数に含まれる値の型に相当する型が指定されます。このような動作により、型にとらわれることなく自由に値を扱うことができます。

JScript では、JScript インタープリタが例外として処理するような異種データ間演算も問題なく記述できます。JScript のインタープリタでは、このような状況に対処するため、自動的にデータの型を変更してから演算を実行します。次に例を挙げて説明します。

演算 結果
数値と文字列の加算 数値が文字列に変換されます。
ブール値と文字列の加算 ブール値が文字列に変換されます。
数値とブール値の加算 ブール値が数値に変換されます。

次に例を示します。

var x = 2000;      // 数値です。
var y = "Hello";   // 文字列です。
x = x + y;         // 数値は文字列に強制変換されます。
document.write(x); // 出力は、2000Hello となります。

文字列を明示的に整数に変換するには、parseInt メソッドを使用します。文字列を明示的に数値に変換するには、parseFloat メソッドを使用します。文字列は、比較の場合は自動的に相当する数値に変換されますが、加算の場合は文字列のままで処理されます。