JavaScript高級プログラム設計第三章の操作符

7224 ワード

ECMAには五つの簡単なデータタイプ(基本データタイプ)があります.Unidefined、Null、Boolean、Number、Stering.各種の基本データタイプに関する操作子:
一元操作子(i++,+i,i–i)
  • は、1つのパケットにデジタル文字を含む文字列を適用すると、それをデジタル値に変換し、1を減算する動作を実行します.文字列変数は数値変数に変わります.
  • は、有効な数字文字を含まない文字列に適用すると、変数の値をNaNに設定し、文字列変数を数値変数にします.
  • は、ブール値falseに適用する場合、まず0に変換してから1を減算する動作を実行する.ブール値が数値変数
  • になります.
  • は、ブール値trueに適用する場合、まず1に変換してから1を減算する動作を実行します.ブール値が数値変数
  • になります.
  • は、浮動小数点数に適用する場合、1を減算する動作を実行する.
  • は、オブジェクトに適用する場合、まずオブジェクトのvalueOf()方法を呼び出して、動作可能な値を取得する.この値に対して、前述の規則を適用する.結果がNaNであれば、toString()メソッドを呼び出してから、前述の規則を適用する.オブジェクト変数が数値変数に変わります.
        var s1 = "2";
        var s2 = "z";
        var b = false;
        var f = 1.1;
        var o = { 
              valueOf: function() {
              return -1;
             }
         };      
        s1++;   //value becomes numeric 3
        s2++;   //value becomes NaN
        b++;    //value becomes numeric 1
        f--;    //value becomes 0.10000000000000009
        o--;    //value becomes numeric ?  
    
    ビット
  • 負数のバイナリコードを格納するフォーマットはバイナリ補数であり、1はこの数の絶対値のバイナリコード2を求めます.絶対値のバイナリ逆符号3を求めます.得られたバイナリ逆符号は1を加えます.
  • はビット非(NOT)を押します.ビット非オペレータによって波線(~)で表されています.ビット非を実行した結果、戻り値の反転です.
     var num1=25;
     var num2=~num1;
     alert (num2);  //        :       1.
    
  • はビットと(AND)を押します.ビットとオペレータは1つの和号文字(&)で表しています.2つのオペレータ数があります.
    var result= 5 & 3;
    alert (result);
    
  • は、ビットまたは(OR)によって表される.
    var result= 5 | 3;
    alert (result);
    
  • はビット別またはビット別に、挿入記号(^^)によって表されます.
    var result= 5^ 3;
    alert (result);  //26
    
  • 左シフト、右シフト、符号なし左シフト、符号なし右シフト
    ブール演算子(ブール操作子は全部で三つあります.非、和、または)
  • 論理非は、1つの(!)感嘆符によって表される.
  • 操作数がオブジェクトの場合、falseに戻ります.
  • 操作数が空の文字列であれば、trueを返します.動作数が空でない文字列の場合、false
  • を返します.
  • 操作数が数値0の場合、trueに戻り、動作数が任意の非0値(Infinityを含む)の場合、falseに戻ります.操作数がnullの場合、true
  • に戻ります.
  • 操作数がNaNであれば、trueに戻ります.動作数がundefinedであれば、true
        alert(!false);      //true
        alert(!"blue");     //false
        alert(!0);          //true
        alert(!NaN);        //true
        alert(!"");         //true
        alert(!12345);      //false
    
    に戻り、同時に2つの論理非オペレータを使用します.すなわち、Boolean()関数2をシミュレートするのに相当します.論理和(&)
  • 最初の動作数がオブジェクトであれば、第2の動作数に戻る.
  • 第二の操作数がオブジェクトである場合、第一の操作数の結果がtrueである場合にのみ、そのオブジェクトに戻ります.
    乗法演算子(3つの乗法演算子:乗算、除算、および加算)−1.乗算
  • 操作数がすべて数値である場合、通常の乗算計算を行い、数値が範囲外でInfinityまたは-Infinity
  • に戻る.
  • 操作数がNaNである場合、結果はNaNである.
  • Infinityと0を掛ければNaNとなります.
  • Infinityと非0の数値が掛け合わされたら、結果はInfinityまたは-Infinity
  • です.
  • InfinityとInfinityを掛ければ、結果はInfinity
  • です.
  • 操作数が数値ではない場合は、バックグラウンドでNumber()を呼び出し、これを−2.除算
  • に変換する.
  • 操作数がすべて数値である場合、通常の乗算計算を行い、数値が範囲外でInfinityまたは-Infinity
  • に戻る.
  • 操作数がNaNである場合、結果はNaNである.InfinityがInfinityによって取り除かれた場合、NaNとなります.
  • ゼロであれば、結果はNaNである.非ゼロの有限数はゼロによって除かれる.結果はInfinityまたは-Infinityです.
  • Infinityが任意の非ゼロ値で除された場合、結果はInfinityまたは-Infinity 3である.
  • 操作数が全部数値なら、従来の計算
  • を実行する.
  • 除数が無限大である場合、除数は有限値であり、結果はNaNである.
  • 除数が有限値である場合、除数が0であるとNaN
  • となる.
  • InfinityとInfinityが除するとNaNとなります.
  • 除数が有限値である場合、除数は無限大であり、その結果、除数
  • である.
  • 操作数が数値でない場合は、バックグラウンドでNumber()を呼び出して変換する.
    加法演算子1.加算
  • 操作数がNaNである場合、結果はNaNである.
  • Infinity加Infinityの場合、結果はInfinityです.
  • -Infinityプラス-Infinityの場合、結果は-Infinityです.
  • Infinityプラス-Infinityであれば、結果はNaNである.
  • +0プラス+0なら、結果は+0です.-0プラス-0なら、結果は-0です.+0プラス-0の場合は+0
  • となります.
  • 二つの操作数が文字列である場合、第二の操作数と第一の操作数をつなぎ合わせる
  • .
  • 操作数が一つだけ文字列である場合、もう一つの操作数を文字列に変換して、二つの文字列をつなぎ合わせます.
  • 操作数がオブジェクト、数値、またはブール値である場合、彼らのtoString()メソッドを呼び出して対応する文字列値を取得し、前の文字列ルールを適用する.undefinedとnullについては、それぞれtoString()を呼び出し、undefined、nullを取得する.
    var result1 = 5 + 5;     //two numbers
    alert(result1);           //10
    var result2 = 5 + "5";   //a number and a string
     alert(result2);           //"55"
    
    は、一例に注意してください.
       var num1 = 5;
       var num2 = 10;
       var message = "The sum of 5 and 10 is " + num1 + num2;
       alert(message);    //"The sum of 5 and 10 is 510"
    
    は各加算動作が独立して実行され、一文字列で数字を加算し、一文字列を得て、また数字を加えて、得られたのは文字列です.したがって、15を得るためには、適切な括弧
        var num1 = 5;
        var num2 = 10;
        var message = "The sum of 5 and 10 is " + (num1 + num2);
        alert(message);    //"The sum of 5 and 10 is 15"
    
  • を使用してください.
    2.減算
  • 操作数がNaNである場合、結果はNaNである.
  • InfinityマイナスInfinityの場合、NaNとなります.
  • -Infinityマイナス-Infinityの場合、NaNとなります.
  • Infinityマイナス-Infinityであれば、結果はInfinityです.
  • +0マイナス+0なら、結果は+0です.マイナス-0なら、結果は+0です.+0マイナス-0なら+0
  • です.
  • 操作数が文字列、ブール値、nullまたはundefinedである場合、バックグラウンドでNumber()関数を呼び出して数値に変換し、前の規則に従って減算計算を行います.変換の結果がNaNであれば、減算の結果はNaNです.
  • 操作数がオブジェクトである場合、オブジェクトを呼び出すvalueOf()方法は、オブジェクトを表す数値を取得する.NaNがあれば、減算の結果はNaNです.オブジェクトにvalueOf()の方法がない場合は、そのtoString()の方法を呼び出し、得られた文字列を数値に変換する.
    var result1 = 5 - true;    //4 because true is converted to 1 var result2 = NaN - 1;     //NaN
    var result3 = 5 - 3;       //2
    var result4 = 5 - "";      //5 because "" is converted to 0
     var result5 = 5 - "2";     //3 because "2" is converted to 2
    var result6 = 5 - null;    //5 because null is converted to 0
    
    リレーション演算子
  • いずれも数値であれば、数値間で比較する
  • .
  • 操作数が文字列である場合、2つの文字列間の対応する文字符号化値
    var result="23"
  • を比較する.
  • 一方が数値であれば、他のものを数値に変換して比較する
     var result="23"<3     //false    "23"      23,  3  
    
  • .
  • 操作数がオブジェクトである場合、このオブジェクトのvalueOf()を呼び出す方法は、前の規則で比較し、valueOf()がない場合はtoStering()
  • を用いる.
  • オペレータがブール値であれば、まず数値に変換して比較します.
    var result1="a"<3  //false
    var result2="a">=3  //false
    
    は、アルファベット「a」が合理的な数値に変換されないので、NaNに変換されますが、NaNが比較されると、動作の結果はfalseに戻ります.
    等しいオペレータ(等しいオペレータ)===":まず変換して比較します.全体のオペレータ"==="は変換しないだけです.
  • nullとundefinedは等しい
  • です.
  • 等しいものを比較する前にnullとundefinedは任意の値
  • に変換できません.
  • 操作数がNaNである場合、等しいオペレータはfalseに戻り、等しくない操作はtrueに戻る.両方の操作数がNaNであっても、等しいオペレータはfalseに戻ります.NaNはNaN
  • に等しくないからです.
  • もし両方の操作数が対象であれば、彼らが同一のオブジェクトであるかどうかを比較し、同一のオブジェクトを指すならば、等しいオペレータはtrueに戻ります.そうでなければfalseに戻ります.
    条件演算子
    コンマ演算子は、コンマ操作子を使用して、1つの文で複数の動作を実行することができる
     var num1=1,num2=2,num3=3
     var num=(5,3,4,2,1,0)  // num  0
    
  • .
    toStringについて:
    /  
    var array = ["CodePlayer", true, 12, -5];
    document.writeln( array.toString() ); // CodePlayer,true,12,-5
    
    //   
    var date = new Date(2013, 7, 18, 23, 11, 59, 230);
    document.writeln( date.toString() ); // Sun Aug 18 2013 23:11:59 GMT+0800 (      )
    
    //   2
    var date2 = new Date(1099, 7, 18, 23, 11, 59, 230);
    document.writeln( date2.toString() ); // Fri Aug 18 1099 23:11:59 GMT+0800 (      )
    
    //   
    var num =  15.26540;
    document.writeln( num.toString() ); // 15.2654
    
    //   
    var bool = true;
    document.writeln( bool.toString() ); // true
    
    // Object
    var obj = {name: "  ", age: 18};
    document.writeln( obj.toString() ); // [object Object]
    
    // HTML DOM   
    var eles = document.getElementsByTagName("body");
    document.writeln( eles.toString() ); // [object NodeList]
    document.writeln( eles[0].toString() ); // [object HTMLBodyElement]
    
    valueOf():valueOfの使い方について