第三章JavaScript基本概念(三)

4466 ワード

4.操作子
_; ECMA-2262は、演算子、ビット操作子、関係操作子、および等しい操作子を含むデータ値を操作するための操作子のセットを記述している.ECMAScriptオペレータの違いは、文字列、数字値、ブール値、またはオブジェクトなどの多くの値に適用できることである.オブジェクトに適用される場合、対応するオペレータは、通常、オブジェクトのvalueOf()とToStering()の方法を呼び出して、動作可能な値を取得する.
4.1一元操作子
_; ECMAScriptの1元オペレータ(+,-,+,-)は、他の言語と似たような整数インクリメント、正数、負数の役割の他に、文字列、論理値、浮動小数点値、オブジェクトにも適用されます.異なる値を適用する場合、1元のオペレータは以下の規則に従います.
  • 文字列:数字だけを含む文字列または空の列=>まず数字に変換します.もう一つの操作を行います.文字列変数は最終的に数値変数に変わります.他の文字列=>NaN
  • ブール値:true=>1、false=>0、そして1元オペレータ動作を行い、ブール値変数は最終的に数値変数に変換されます.
  • 浮動小数/整数:1元オペレータ操作を実行します.
  • オブジェクト:まず、valueOf()方法を呼び出し、動作可能な値を得る.この値に上記の規則を適用します.結果がNaNであれば、toString()メソッドを呼び出し、上記規則を適用する.最終的には変数を数値変数に変換したいです.
  • 4.2ビット操作子
    _; ECMAScriptにおけるビット操作子は主に以下を含む.
  • ~:ビットの逆
  • &:ビットと
  • |:ビット別または
  • ^:ビット別または
  • <
  • >:符号付き右シフト
  • >>:符号なし右シフト
  • 非数値にオペレータを適用すると、Number()関数を使用して値を数値に変換し(自動完了)、ビット操作を適用します.得られた結果は数値です.
    4.3ブール操作子
      ECMAScriptには三つのブールオペレータがあります.NOT(論理非、!)、AND(論理和、&&&)とOR(論理または124; 124; 124; 124;).
    _; NOT(!)演算子は、ECMAScriptのいずれかの値に適用できます.この値がどのタイプであれ、このオペレータはブール値を返します.NOTオペレータはまずその操作数をブール値に変換してから反対を求めます.ブール値に変換する規則はBoolean()関数と同じです.具体的なBoolean()関数変換規則は記事を参照してください.
    _; AND(&&)演算子は、ECMAScriptでは、任意の種類の操作数にも適用できます.ANDオペレータは基本原則に従います.最初の操作数がtrueであれば、直接に第二の操作数に戻ります.最初の動作数がfalseである場合、最初の動作数に直接戻ります.ANDオペレータの具体的な変換ルールは以下の通りです.
  • 操作数がnull/NaN/undefined/"であれば、直接null/NaN/undefined/"
  • に戻ります.
  • 最初の操作数が対象であれば、直接に第2の操作数
  • に戻る.
  • 第二の操作数がオブジェクトである場合、第一の操作数の結果がtrueである場合にのみ、そのオブジェクトに戻ります.
  • 両方の操作数が対象である場合、第2の操作数
  • に戻る.
    _; OR(?124; 124;)オペレータはANDオペレータと似ています.ECMAScriptではどのタイプの操作数にも使用できます.ORオペレータは基本原則に従います.最初の操作数がfalseの場合、直接に第二の操作数に戻ります.最初の操作数がtrueなら、直接最初の操作数に戻ります.ORオペレータの具体的な変換ルールは以下の通りです.
  • もし両方の動作数がnull/NaN/undefined/"であれば、直接null/NaN/undefined/"
  • に戻ります.
  • 最初の操作数がオブジェクトである場合、直接に第1の操作数
  • に戻る.
  • 第一操作に属する求値結果がfalseであれば、直接に第二操作数
  • に戻る.
  • 両方の操作数が対象であれば、直接に第1の操作数
  • に戻る.
    ORの特性を利用して、変数のnullまたはundefined値の割り当てを避けることができます.たとえば:
    var myObject = preferredObject || backupObject;
    
    4.4乗法操作子
    _; ECMAScriptは3つの乗法演算子を定義しました.乗算、除算、求モールドです.これらのオペレータは他の言語の対応するオペレータと似ていますが、ECMAScriptの乗組オペレータは非数値のタイプにも適用されます.計算に参加した操作数が数値でない場合、バックグラウンドはまずNumber()変換関数を使って数値に変換して、数値変数を返します.
      乗法オペレータは以下の規則に従う.
  • 操作数がすべて数値である場合、通常の乗算で計算されます.積がECMAScriptの表示範囲を超えたら、Infinityまたは-Infinityに戻ります.
  • 操作数がある場合NaNはNaN
  • に戻ります.
  • Infinityは0と乗算し、NaN
  • に戻る.
  • Infinityは、非0値と乗算され、InfinityまたはInfinityに戻り、正負は、シンボル操作数のあるシンボル
  • に依存する.
  • InfinityとInfinityを掛け合わせた結果、Infinity
  • です.
  • 操作数が数値ではない場合は、バックグラウンドでNumber()関数を呼び出して数値に変換し、上記の規則を適用する.
  •   除法のルールは以下の通りです.
  • 操作数がすべて数値である場合、従来の除算計算を実行する.ECMAScript値の表示範囲を超えた場合、Infinityまたは-Infinityに戻ります.
  • 操作数がNaNであれば、NaN
  • に戻る.
  • InfinityはInfinityによって削除され、NaN
  • に戻ります.
  • 0はゼロになり、NaN
  • に戻る.
  • 非ゼロ有限数はゼロになり、結果はInfinityまたは-Infinity
  • である.
  • Infinityは任意の数で削除され、Infinityまたは-Infinity
  • に戻ります.
  • 操作数が数値でない場合は、バックグラウンドでNumber()関数を呼び出して対応する数値に変換し、上記の規則
  • を適用する.
    _; 求模式的操作規則は以下の通りである.
  • 両方の動作数が数値である場合、従来の除算法に従って計算し、割り算された剰余数
  • を返します.
  • 除数は無限大であり、除数は有限値であり、NaN
  • に戻る.
  • 除数は有限値であり、除数は0であり、NaN
  • に戻る.
  • Infinity%InfinityはNaN
  • に戻ります.
  • 被除数有限値は、無限大であり、除数
  • を返します.
  • は除数され、0に戻り、1つの動作数が数値でない場合は、バックグラウンドでNumber()関数を呼び出して対応する数値に変換し、上記規則
  • を適用する.
    4.5アダプティブ操作子
    _; はECMAScriptにおいて、加算(+)と減算(-)があります.アダプティブ操作は、アダプティブオペレータと同様であり、バックグラウンドで異なるデータタイプを変換することもある.両方の操作数が数値である場合、通常の足し算で計算し、次の規則に従って結果を返します.
  • 操作数がNaNであれば、NaN
  • に戻る.
  • Infinity+Infinity=Infinity
  • -Infinity+-Infinity=-Infinity
  • Infinity+-Infinity=NaN
  • +0++0=+0
  • -0+-0=-0
  • +0+-0=+0
  • ただし、動作数が文字列である場合、加算の適用規則は以下の通りです.
  • 、両方の操作数が文字列である場合、第二の文字列を第一の文字列と連結する
  • .
  • 操作数が文字列である場合、他の操作数を文字列に変換して、この2つの文字列をつなぎ合わせます.オブジェクトに対して、数字とブール値は、それらのtoString()方法を呼び出し、undefinedとnullに対しては、String()関数を呼び出して、「undefined」と「null」を返します.
  •    は加算規則と似ています.ECMAScriptの減算オペレータは各種データタイプの変換を処理する時、同様にいくつかの特殊な規則に従います.以下の通りです.
  • 操作数がNaNの場合、NaN
  • に戻ります.
  • Infinity-Infinty=NaN
  • -Infinity-Infinity=NaN
  • Infinity-Infinity=Infinity
  • -Infinity-Infinity=-Infinity
  • +0-+0=+0
  • +0--0=-0
  • -0--0=+0
  • 操作数が文字列、ブール値、nullまたはundefinedである場合、バックグラウンドでNumber関数を呼び出して数値に変換し、前の規則に従って計算します.
  • 操作数がオブジェクトである場合、オブジェクトのvalueOf()メソッドを呼び出すと、NaNの値が得られた場合、減算の結果はNaNとなります.オブジェクトがvalueOf()方法がない場合、そのtostring()方法を呼び出して、得られた文字列を数値に変換します.
  • .