比較演算子

概要

比較演算子 (Comparison operator) のオペランドは、数値にも文字列にもなることができます。文字列は、Unicodeの値を用い、標準の辞書に基づいて比較されます。

JavaScript には、厳密に比較する方法と、型変換した結果で比較する方法の2通りがあります。厳密に比較する場合、オブジェクトは同じ型でなければならず、かつ、以下の通りになります。

  • 2つの文字列は、文字の順序が同一で、長さが等しく、かつ対応する位置の文字が等しいとき、厳密に等しくなります。
  • 2つの数値は、数字的に等しいとき(数字の値が等しいとき)、厳密に等しくなります。NaNは、どんなものとも(NaNとも)等しくなりません。プラスゼロとマイナスゼロはそれぞれに対し等しくなります。
  • 2つの論理オペランドは、両者が true あるいは両者が false のとき、厳密に等しくなります。
  • 2つのオブジェクトは、それらが同じオブジェクトを参照しているとき、厳密に等しくなります。
  • Null と Undefined の型は、== の関係が成り立ちます(しかし === の関係は成り立ちません)。

以下の表に、比較演算子について説明します。

演算子 説明 真(true1)を返す例
等しい (==) もし2つのオペランドが同じ型ではないならば、Javascriptはオペランドを変換し、そして厳密な比較を適用します。もしどちらかのオペランドが数値または論理値ならば、オペランドは可能ならば数値に変換されますが、そうでなくもしどちらかのオペランドが文字列ならば、他方のオペランドは可能ならば文字列に変換されます。

3 == var1
"3" == var1
3 == '3'

等しくない (!=) もしオペランド同士が等しくないならば真を返します。もし2つのオペランドが同じ型ではないならば、Javascriptは適切な型にオペランドを変換して比較しようと試みます。

var1 != 4
var1 != "5"

厳密に等しい (===) オペランド同士が、型を変換することなく(上に示した通り)厳密に等しいならば真を返します。

3 === var1

厳密には等しくない (!==) オペランド同士が等しくない、型が等しくない、あるいはその両方ならば真を返します。

var2 !== 3
3 !== '3'

より大きい (>) 左オペランドが右オペランドより大きいならば、真を返します。

var2 > var1

より大きいまたは等しい(以上) (>=) 左オペランドが右オペランドより大きいまたは等しいならば、真を返します。

var2 >= var1
var1 >= 3

より小さい (<) 左オペランドが右オペランドより小さいならば、真を返します。

var1 < var2

より小さいまたは等しい(以下) (<=) 左オペランドが右オペランドより小さいまたは等しいならば、真を返します。

var1 <= var2
var2 <= 5

1 この例では、var1 に3という値が割り当てられ、var2 に4という値が割り当てられていると仮定しています。

等価演算子を使う

通常の等価演算子 (==!=) はオペランドの型に関係なく2つのオペランドを比較します。厳密等価演算子 (===!==) は同一の型かどうかに関する比較も行います。

alert(5 == "5"); // true
alert(5 === "5"); //false

オペランドがその値だけでなく特定の型でなければならない場合、あるいはオペランドの正確な型が重要である場合には、厳密等価演算子を使ってください。それ以外では通常の等価演算子を使いますが、その場合は2つのオペランドがたとえ同じ型でなくても比較が可能になります。

型の変換が必要とされるときは、Javascript は以下のように文字列、数値、論理値、オブジェクトに変換します。

  • 数値と文字列を比較するとき、文字列は数値に変換されます。Javascript は文字列の数値リテラルを Number 型の数値に変換しようと試みます。最初に、その文字列の数値リテラルから数学的な値を引き出します。次に、最も近い Number 型の値にこの値を丸めます。
  • もしオペランドの片方が Boolean ならば、その論理オペランドは true ならば 1 に、そして false ならば +0 に変換されます。
  • オブジェクトを数値または文字列と比較する場合、Javascript はそのオブジェクトの既定値を返そうとします。演算子はそのオブジェクトを、そのオブジェクトの valueOftoString といったメソッドを用いて、プリミティブな値か、String か、あるいは Number の値に変換しようとします。そうした変換の試みが失敗したときにはランタイムエラーが生成されます。
  • 比較対照がプリミティブ値である場合のみ、オブジェクトはプリミティブ値に変換されます。両方のオペランドがオブジェクトであれば、それらはオブジェクトとして比較され、両方が同じオブジェクトを参照する場合にのみ、テストは「真」となります。

Tags (1)

タグを編集

Attachments (0)

 

添付ファイル