JavaScript

   


運算子 (Operator)


運算子

運算子有以下幾種類:

  1. 算術運算子 (Arithmetic Operators)
  2. 字串運算子 (String Operators)
  3. 邏輯運元 (Logical Operators)
  4. 位元運算子 (Bitwise Operators)
  5. 指定運算子 (Assignment Operators)
  6. 比較運算子 (Comparison Operators)
  7. 特別運算子 (Special Operators)

以下分別介紹各運算子

  1. 算術運算子 (Arithmetic Operators)

    用來做一些與數目有關的工作。 例如加、減、乘和除法。

    運算子 例子 說明
    + var1 = var2 + var3 var2var3 的內容相加, 然後放到 var1
    ++ var1++ 即是 var1 = var1 + 1
    - var1 = var2 - var3 var2 減去 var3 的結果放到 var1
    -- var1-- 即是 var1 = var1 - 1
    * var1 = var2 * var3 var2var3 的內容相乘, 然後放到 var1
    / var1 = var2 / var3 var2 除以 var3 的結果放到 var1
    % var1 = var2 % var3 var2 除以 var3 的餘數放到 var1

    例子: 算術運算子

    <script>
    var a = 1;
    var b = 2;
    var c = a + b;
    document.write("<br> a + b = " + c);
    document.write("<br> Before Increament, c = " + c );
    c++;
    document.write("<br> After Increament, c = " + c );
    var r = 5 % 2;
    document.write("<br>The remainder of 5 divided by 2 = " + r );
    </script>

  2. 字串運算子 (String Operators)

    用來做一些與字串有關的工作。 例如將兩個字串連接, 得出一個更長的字串。

    運算子 例子 說明
    + a = "abc" + "1234" 將 "abc" 和 "1234" 兩個字串連接, 再放到 a , 因此執行完這句後, a 的內容是 "abc1234"
    += a += "1234" 即是 a = a + "1234"

    因為字串和數目型態都可以用 ++= , 所以如果不留意變數的型態就很容出錯。

    例子:

    <script>
    var a = "Java";
    var b = "Script";
    var c = "was born in";
    var year1 = 19;
    var year2 = 95;
    document.write(a + b + " " + c + " " + year1 + year2);
    var year3 = year1 + year2;
    document.write("<br>" + a + b + " " + c + " " + year3);
    </script>

    例子說明:

    • document.write(a + b + " " + c + " "
      + year1 + year2);

      因為這條運算式有字串型態的資料, 所以 JavaScript 就把它當作字串運算, 雖然 year1 和 year2 分別是 19 和 95 數目, 但也被當作是 "19" 和 "95" , 而相加結果就是 "1995" 了。

    • var year3 = year1 + year2;

      因為這條運算式沒有字串型態的資料, 所以 JavaScript 就把它當作算術運算, year3 = year1 + year2 = 19 + 95 = 114

  3. 邏輯運元 (Logical Operators)

    通常是做一些有關布林型態的運算。 傳回的值可以是 true 或 false , 如果有算式未被定義, 就會傳回 null 。

    運算子 例子 說明
    && expr1 && expr2
    expr1
    and expr2
    如果 expr1 expr2 都是 true , 就會傳回 true , 否則傳回 false
    || expr1 || expr2
    expr1
    or expr2
    如果 expr1 expr2 是 true , 就會傳回 true , 否則傳回 false
    ! !expr1
    not expr1
    如果 expr1 是 true , 就傳回 false, 否則傳回 false

    例子:辨斷能否參加高考 (Alevel exam), 假設參加高考的要求是語言科目合格, 者年滿 21 歲。

    <script>
    var chinese_pass = true;
    var english_pass = false;
    var over21 = true;

    // pass in language subject(Chinese AND English)
    var lang_pass = chinese_pass && english_pass

    /* requirement to sit in alevel:
    pass in langauge subject OR over 21 years old
    */
    var alevel = lang_pass || over21

    document.write("Allow to sit in alevel? " + alevel);
    </script>

     

    例子說明:

    例子中所有變數都是布林型態, 參加者年滿 21 歲 , 經運算後 alevel 就是 true 。

  4. 位元運算子 (Bitwise Operators)

    用來做二進制的位元運算。 因為位元運算可以說是低階 (Low-level)工作, 所以運算得較快, 而且有些位元運算子可以做算術運算, 例如乘以 2 的倍數或除以 2 的倍數。

    下表用了兩個整數 a 和 b 用例子, 假設 a = 12 , b = 10, 它們的二進制表示方式分別是 a = 00001100b , b = 00001010b , 數字後面的 b 字代表該數字是二進制。

    運算子 例子 二進制運算 說明
    & a & b a    = 00001100b = 12
    b    = 00001010b = 10
    a & b = 00001000b = 8
    AND
    如果兩個位元都是 1 , 結果就是 1 , 否則是 0
    | a | b a    = 00001100b = 12
    b    = 00001010b = 10
    a | b = 00001110b = 14
    OR
    如果任何一個位元是 1 , 結果就是 1 , 否則是 0
    ^ a ^ b a    = 00001100b = 12
    b    = 00001010b = 10
    a ^ b = 00000110b = 6
    XOR
    如果位元不相同, 結果是 1 , 否則是 0
    ~ ~a a = 00001100b = 12
    ~a = 11110011b = -13
    NOT
    將所有位元的 0 變成 1, 1 變成 0。
    註: a 是用了 Two's Complement 表示方式
    << a << 2 a      = 00001100b = 12
    a << 2 = 00110000b = 48
    左移 (Left Shift)
    將 a 的所有位元向左移兩個位, 右邊的位元補入 0。
    >> c >> 2 c
    = 負 (2 的 30 次方)
    = -1073741824

    c >> 2
    = 負 2 的 28 次方
    = - 268435456
    有極右移 (Sign-propagating right shift)
    將 c 的所有位元向右移兩個位, 最左邊的位元補入極性位元 (Sign Bit) , 即是保持它的極性
    >>> c >>> 2 c
    = 負 (2 的 30 次方)
    = -1073741824
    c >>> 2
    = 805306368
    = 2 的 29 次方 + 2 的 28 次方
    補零右移 (Zero-Fill Right Shift)
    將 c 的所有位元向右移兩個位, 左邊的位元補入 0

    例子:用 << 做乘以 2 的倍數運算, 用 >> 做除以 2 的倍數運算。

     

    <script>
    var a = 3;
    a = a << 3;  //multiply a by 8
    document.write("3 * 8 = " + a);
    // now, a = 24
    a = a >> 2;  //divide a by 4
    document.write("<br>24 / 4 = " + a);
    </script>

    例子說明:

    << 可以做乘以 2 的倍數運算, 以下例如可將 a 乘以 2 的 n 次方:

    a = a << n

    >> 可以做除以 2 的倍數運算, 以下例如可將 a 除以 2 的 n 次方:

    a = a >> n
  5. 指定運算子 (Assignment Operators)

    將運算後的結果放到某個變數, 最常用的就是等號 (=), 還有, 指定運算子可以令算式簡單一點。

    運算子 例子 意思
    = var1 = var2 var1 的內容等於 var2 的內容
    += var1 += var2 var1 = var1 + var2
    -= var1 -= var2 var1 = var1 - var2
    *= var1 *= var2 var1 = var1 * var2
    /= var1 /= var2 var1 = var1 / var2
    %= var1 %= var2 var1 = var1 % var2
    &= var1 &= var2 var1 = var1 & var2
    ^= var1 ^= var2 var1 = var1 ^ var2
    |= var1 |= var2 var1 = var1 | var2
    <<= var1 <<= var2 var1 = var1 << var2
    >>= var1 >>= var2 var1 = var1 >> var2
    >>>= var1 >>>= var2 var1 = var1 >>> var2

    例子:用 ^ (XOR) 運算子交換兩個整數型態變數的內容

    <script>
    var a = 135;
    var b = 246;
    document.write("<br>Before interchange, ");
    document.write("a = " + a + ", b = " +b);
    a ^= b ; b ^= a ; a ^= b ;
    document.write("<br>After interchange, ");
    document.write("a = " + a + ", b = " +b);
    </script>

  6. 比較運算子 (Comparison Operators)

    用來比較多兩個算式的關係, 例如一個算式是否等於另一個算式。 比較後傳回的結果是 true 或 false 其中一個。

    運算子 例子 說明
    == expr1 == expr2 如果 expr1 等於 expr2 , 就傳回 true
    != expr1 != expr2 如果 expr1 不等於 expr2 , 就傳回 true
    > expr1 > expr2 如果 expr1 大於 expr2 , 就傳回 true
    >= expr1 >= expr2 如果 expr1 大於或等於 expr2 , 就傳回 true
    < expr1 < expr2 如果 expr1 小於 expr2 , 就傳回 true
    <= expr1 <= expr2 如果 expr1 小於或等於 expr2 , 就傳回 true

    例子:應用比較運算元

    <script>
    var a = 3;
    var b = 4;
    document.write("a = " + a + " , b = " + b);
    var result;
    result = a == b;
    document.write("<br>a equals b ? " + result);
    result = a != b;
    document.write("<br>a does not equal b ? " + result);
    result = a > b;
    document.write("<br>a is greater than b ? " + result);
    result = a >= b;
    document.write("<br>a is greater than or equal to b ? " + result);
    result = a < b;
    document.write("<br>a is smaller than b ? " + result);
    result = a <= b;
    document.write("<br>a is smaller than or equal to b ? " + result);
    </script>

  7. 特別運算子 (Special Operators)

    用來做特別或較複雜的運算。

    運算子 例子 說明
    ? : condition ? expr1 : expr2 如果 condition 是 true, 就傳回 expr1 的結果, 否則傳回 expr2 的結果。

    例子:應用特別運算元

    <script>
    var sex1 = "m";
    var sex2 = "f";
    var sex_full1;
    sex_full1 = (sex1 == "m") ? "Male" : "Female";
    var sex_full2;
    sex_full2 = (sex2 == "m") ? "Male" : "Female";
    document.write("m = " + sex_full1);
    document.write("<br>f = " + sex_full2);
    </script>

 







[到頁頂] [首頁] [速查表]