MDN may have intermittent access issues April 18 13:00 - April 19 01:00 UTC. See whistlepig.mozilla.org for all notifications.

mozilla
Your Search Results

    比較演算子

    比較演算子 (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 の値に変換しようとします。そうした変換の試みが失敗したときにはランタイムエラーが生成されます。
    • 比較対照がプリミティブ値である場合のみ、オブジェクトはプリミティブ値に変換されます。両方のオペランドがオブジェクトであれば、それらはオブジェクトとして比較され、両方が同じオブジェクトを参照する場合にのみ、テストは「真」となります。

    注記: 「文字列オブジェクト」はオブジェクトであり、プリミティブな「文字列」とは異なります。よって「文字列オブジェクト」同士の比較はオブジェクト同士の比較となります。通常は「文字列オブジェクト」を用いることは少ないので、次のコードはあなたの意表をつく結果となるものかもしれません。

    'foo' === 'foo' // 両方がプリミティブな文字列、即ち文字列型であるため、true が返ります
    
    var a = new String('foo'); // プリミティブ値ではなくオブジェクトです
    var b = new String('foo');
    
    // 比較 a、b、プリミティブを比較してみます
    a == b     // false。 a と b はオブジェクト型であり、異なるオブジェクト同士の比較となります。
    a === b    // false。 a と b はオブジェクト型であり、異なるオブジェクト同士の比較となります。
    a == 'foo' // true。  a と b は異なる型を持っており、よってオブジェクト a は文字列型に変換されて比較されます。

    ドキュメントのタグと貢献者

    Contributors to this page: Potappo, ethertank, teoli
    最終更新者: teoli,
    サイドバーを隠す