JavaScript式&演算子


算術演算子


オペランド(または変換結果)がNaN値であれば、算術演算の結果もNaNである.除数0の演算結果は正の無限大または負の無限大であり,0/0の結果はNaNであり,これらの演算はすべてエラーを報告しない.

「+」演算子

  • オペランドの1つがオブジェクトである場合、オブジェクトは元の値に変換されます(日付オブジェクト以外はvalueOf()変換が優先されます).
  • オブジェクトから元の値への変換を行った後、一方のオペランドが文字列であれば、他方のオペランドも文字列に変換され、文字列接続が行われる.
  • それ以外の場合、両方のオペランドは数値(またはNaN)に変換され、加算されます.
  • 1 + 2           // 3
    "1" + 2         // "12",        
    1 + {}          // "1[object Object]",             
    
    true + true     // 2,       
    
    2 + null        // 2,null   0
    2 + undefined   // NaN,undefined   NaN    

    演算結果の同期は、次のような演算子の演算順序に依存します.
    1 + 2 + "blind mice";   // "3 blind mice"
    1 + (2 + "blind mice"); // "12 blind mice"

    「++」演算子


    式++xの合計はx=x+1と全く同じではありません.xが文字列"1"である場合、++xの結果は数字*2であり、x+1は文字列*"11"である.

    関係演算子


    “===”(strict equality)


    厳密に等しい演算子です.比較プロセスには変換のタイプはありません.比較プロセスは次のようになります.
    2つの値のタイプが異なる場合、2つの値は等しくありません.
  • は、2つの値が数値であり、値が等しい場合に等しい.1つが0で、もう1つが-0の場合、彼らは同じです.
  • は、2つの値が文字列であり、対応するビットの16ビット数が完全に等しい場合に等しい.
  • 両方の値がブール値trueまたはfalseである場合、それらは等しい.
  • 両方の値がnullまたはundefinedの場合、それらは等しい.
  • いずれかの値がNaNである場合、または両方の値がNaNである場合、それらは等しくない.
  • 2 2 2つの参照値が同じオブジェクト、配列、または関数を指す場合、それらは等しい.異なるオブジェクトを指す場合、2つのオブジェクトはまったく同じプロパティを持っていますが、それらは等しくありません.

  • “==”(equality operator)


    2つのオペランドが同じタイプである場合、2つのオペランドは、厳密に等しい規則"=="で比較されます.
  • 2 2 2つのオペランドが異なる場合、
  • という変換が発生します.
    1つの値がnullで、もう1つがundeinedの場合、それらは等しい.1つの値が数値で、もう1つが文字列の場合、String->Number変換後に値比較を行います.値がブールタイプの場合、true->1、false->0を変換して値比較します.
    "1" == true;    // true

    比較演算子(<,>,<=,>=)

  • オペランドがオブジェクトの場合、オブジェクトは元の値に変換されます.
  • オブジェクトが元の値に変換された後、両方のオペランドが文字列である場合、文字列で比較されます.
  • 少なくとも1つのオペランドが文字列でない場合、数値に変換して比較する.0と-0は等しく、いずれかのオペランドがNaNの場合、比較オペレータは常にfalseを返します.
  • "11" < "3"  // true"11" < 3    // false"11"   11
    "one" < 3   // false"one"   NaN

    in演算子


    in演算子は、左オペランドが文字列であるか、文字列に変換できるか、右オペランドがオブジェクトであることを望んでいます.右側のオブジェクトに左操作数値という属性名がある場合、式はtrueを返します.
    var point = { x:1, y:1 };
    "x" in point;               // true"x"   
    "z" in point;               // false"z"   
    "toString" in point;        // true,    toString()  
    
    var data = [7, 8, 9];
    "0" in data;                // true"0"
    1 in data;                  // true3 in data;                  // false3   

    instanceof演算子


    式「o instanceof f」を計算するために、JavaScriptはまずf.prototypeを計算し、プロトタイプチェーン(prototype chain)でoを検索し、見つかった場合、oはf(またはfの親)のインスタンスであり、式はtrueを返す.

    論理式


    論理または(|)


    この演算子は、代替式のセットから最初の真値式を選択するためによく使用されます.
    //   max_width     ,      
    //    preferences     max_width
    //          ,       
    var max = max_width || preferences.max_width || 500;

    その他の演算子


    delete演算子


    deleteは、オブジェクトのプロパティまたは配列要素(メモリを解放する必要はありませんが)を削除するためのメタ演算子です.元の値はundefinedになります.
    var o = { x:1, y:2 };
    delete o.x;
    "x" in o;               // false,       
    
    var a = [1,2,3];
    delete a[2];
    2 in a;                 // false,    2     
    a.length;               // 3,  :         !!!

    void演算子


    この演算子は、例えばHTMLの<a>要素からJavaScript関数を呼び出す場合など、出力すべきでない値を出力しないようにするために一般的に使用されます.これを正しく行うには、関数が有効な値を返すことはできません.そうしないと、ブラウザはページを空にし、関数の結果だけを表示します.例:
    <a href="javascript:window.open('about:blank')">Click me</a>

    この行のコードをHTMLページに入れて、その中のリンクをクリックすると、画面に「[object]」が表示されます.これはwindowのためです.Open()メソッドは、新しく開いたウィンドウの参照を返します.オブジェクトは表示する文字列に変換されます.このような効果を回避するにはvoid演算子でwindowを呼び出すことができる.Open()関数:
    <a href="javascript:void(window.open('about:blank'))">Click me</a>

    これはwindowです.Open()呼び出しはundefinedを返します.有効な値ではなく、ブラウザウィンドウに表示されません.