JScript の代入と等価比較
JScript では、代入演算子を使用して変数に値を代入します。 等値演算子は 2 つの値を比較します。
代入
多くのプログラミング言語と同様に、JScript は等号 (=) を使用して変数に値を代入します。等号は代入演算子です。 = 演算子の左のオペランドは "左辺値" であることが必要です。つまり、変数、配列要素、またはオブジェクト プロパティを指定する必要があります。
= 演算子の右側のオペランドは "右辺値" です。 右辺値には、式の結果を示す値を含む、あらゆる型の任意の値を指定できます。 JScript の代入ステートメントの例を次に示します。
anInteger = 3;
JScript は、このステートメントを次のように解釈します。
"値 3 を変数 anInteger に代入する。"
または
"anInteger の値は 3 である。"
型の注釈でステートメントの変数を特定のデータ型にバインドしていない場合、代入は常に成功します。 バインドしている場合、コンパイラは左辺値を右辺値のデータ型に変換しようとします。 変換が成功しない場合、コンパイラはエラーを生成します。 特定の値でだけ変換が成功する場合、コンパイラはコードの実行時に変換に失敗する可能性があることを示す警告を生成します。
次の例では、変数 i に格納された整数値を変数 x に代入すると、整数値は double 値に変換されます。
var i : int = 29;
var x : double = i;
詳細については、「型変換」を参照してください。
等価比較
他の一部の言語と異なり、JScript では等号を比較演算子として使用しません。等号は、代入演算子としてだけ使用されます。 2 つの値を比較する場合は、等値演算子 (==) または厳密等価演算子 (===) を使用します。
等値演算子は、プリミティブな文字列、数値、および Boolean を値渡しで比較します。 必要に応じて型変換を行った後、2 つの変数が同じ値である場合、等値演算子は true を返します。 オブジェクト (Array、Function、String、Number、Boolean、Error、Date、および RegExp オブジェクト) は、参照渡しで比較されます。 2 つのオブジェクト変数の値が同じであっても、true が返されるのは同一のオブジェクトを参照している場合だけです。
厳密等価演算子は 2 つの式の値と型の両方を比較します。2 つの式が等値演算子で等価であり、両方のオペランドのデータ型が同じ場合にだけ true を返します。
注意
厳密等価演算子は、数値データ型を区別しません。 代入演算子、等値演算子、および厳密等価演算子の違いを理解してください。
スクリプト内で行った比較の結果は、常に Boolean 値となります。 JScript のコード例を次に示します。
y = (x == 2000);
変数 x の値が数値 2000 と等しいかどうかが評価されます。 変数の値が 2000 である場合、比較の結果は Boolean 値の true になり、これが変数 yに代入されます。 x が 2000 に等しくない場合、比較の結果は Boolean 値の false になり、y に代入されます。
等値演算子は、型変換を行って、値が等しいかどうかをチェックします。 次の JScript コードでは、リテラル文字列 "42" は、比較の前に数値の 42 に変換されます。 結果は true になります。
42 == "42";
オブジェクトを比較するときの規則は異なります。 等値演算子の動作は、オブジェクトの型に応じて決まります。 オブジェクトが、等値演算子を使って定義されたクラスのインスタンスである場合、戻り値は等値演算子の実装に応じて決まります。 等値演算子を提供するクラスは、JScript では定義できません。ただし、他の .NET Framework 言語では、このようなクラス定義も許可されます。
JScript の Object オブジェクトを基にしたオブジェクトや JScript クラスのインスタンスなど、等値演算子が定義されていないオブジェクトを比較する場合、それらのオブジェクトは同じオブジェクトを参照している場合にだけ等しくなります。 つまり、同じデータを含む 2 つの異なるオブジェクトは、異なるものとして比較されます。 この動作を次の例に示します。
// A primitive string.
var string1 = "Hello";
// Two distinct String objects with the same value.
var StringObject1 = new String(string1);
var StringObject2 = new String(string1);
// An object converts to a primitive when
// comparing an object and a primitive.
print(string1 == StringObject1); // Prints true.
// Two distinct objects compare as different.
print(StringObject1 == StringObject2); // Prints false.
// Use the toString() or valueOf() methods to compare object values.
print(StringObject1.valueOf() == StringObject2); // Prints true.
等値演算子は、制御構造の条件ステートメントで特に有効です。 等値演算子とそれを使用するステートメントを組み合わせてみます。 JScript コードの例を示します。
if (x == 2000)
z = z + 1;
else
x = x + 1;
JScript の if...else ステートメントは、x の値が 2000 の場合に特定の動作 (この場合は、z = z + 1) を実行し、x の値が 2000 でない場合は別の動作 (x = x + 1) を実行します。 詳細については、「JScript の条件構造」を参照してください。
厳密等価演算子 (===) は、数値データ型でだけ型変換を行います。 したがって、整数値の 42 と倍精度浮動小数点値の 42 は等価と見なされますが、どちらも文字列の "42" とは等価になりません。 この動作を次の JScript コードで示します。
var a : int = 42;
var b : double = 42.00;
var c : String = "42";
print(a===b); // Displays "true".
print(a===c); // Displays "false".
print(b===c); // Displays "false".