邂逅Javascript

LESSON 3 - Operators 運算子

什麼是運算子?

簡單來說。。。就是一般會用到的加減乘除

還有其他邏輯運算

Javascript運算子的種類

代入運算子

Assignment Operators

// 常用的代入運算子
x = y       // x = 10
x += y      // x = x + y    Ex. 3 = 2 + 1
x -= y      // x = x - y    Ex. 1 = 2 - 1
x *= y	    // x = x * y    Ex. 2 = 2 * 1
x /= y	    // x = x / y    Ex. 2 = 2 / 1
x %= y	    // x = x % y    Ex. 1 = 3 % 2
x &= y	    // x = x & y    Ex. 1 = 1 & 1
x |= y	    // x = x | y    Ex. 1 = 1 | 0

比較運算子

Comparison Operators

// 常用的比較運算子 以下範例都會回傳true
==     // 3==3, '3'==3, 3=='3'
!=     // 1!=4, 2!='3'
===    // 3===3
!==    // 3!=='3'
>      // 3>2
>=     // 3>=3
<      // 2<3
<=     // 2<=2

算術運算子

Arithmetic Operators

// 標準的算術運算子包含加(+)、減(-)、乘(*)、除(/)、餘數(%)
// 以下為Javascript的其他運算式

var x = 1
++x // 2
x++ // 2
console.log(x) // 3

var y = 3
--y // 2
y-- // 2
console.log(y) // 1

邏輯運算子

Logical Operators

// AND運算(&&)
// 當兩者為true時才會回傳true
var a = true && true;  // return true
var b = false && true; // return false

// OR運算(||)
// 當兩者有一個為true時就會回傳true
var c = false || true;  // return true
var d = false || false; // return false

// NOT運算(!)
// 當式子能轉換為false則回傳true
var e = !false // return true
var f = !true  // return false
var g = !"Cat" // return false

// NOT運算子常用來做流程控制的邏輯判斷
// Ex. 判斷傳進來的值是否為空
var somevalue = null;
if(!value) { 
    // do something...
}
// 如果condition為true,則結果取val1,否則取val2
condition ? val1 : val2

var age = 19;
var huli = (age>=18) ? "成年" : "未成年";

條件運算子

Ternary Operators

var str = "abc"+"def"; // abcdef
var str2 = "abc";
str2 += "xyz"; //abcxyz

String Operators

// 如果指定的對象存在則回傳true
val1 in array1

// Array
var weekday = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'];
0 in weekday // true
5 in wekkday // false
'monday' in weekday // false

In operators

補充說明1 - 浮點數的算術運算

// (此範例截至https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/運算子/算術運算子)
// 當使用浮點數時:(須特別注意,除以零會產生 NaN)
// 註:NaN => Not a Number

1 / 2      // 在 JavaScript 中返回 0.5
1 / 2      // 在 Java 中返回 0(這兩個數並未明確表示為浮點數)
1.0 / 2.0  // 在 JavaScript 和 Java 中都返回 0.5

補充說明2 - 位元運算子

Bitwise Shift Operators

  • 運算元視為一組 32 位元的集合 (0或1)
  • 十進 => 二進制 => 標準Javascript數值
  • 對應的位元結成配對︰第一個位元對第一個位元、第二個位元對第二個位元,餘類推。

1 => 1

2 => 10

3 => 11

4 => 100

5 => 101

6 => 110

7 => 111

8 => 1000

9 => 1001

10進制 => 2進制

8 => 1000

9 => 1001

9 & 8 = 8

1001 & 1000 = 1000

位元 AND (&)

9 | 8 = 9

1001 | 1000 = 1001

位元 OR (|)

9 ^ 8 = 1

1001 | 1000 = 0001

位元 XOR (^)

兩者為 1 時,返回 1

兩者或其中一者為 1 時,返回 1

其中一者而非兩者為 1 時,返回 1

位元位移運算

Bitwise Shift Operators

4 << 1 = 8

0100 => 1000

  • 把第一個運算元向左移動指定的位元數
  • 丟棄向左移出的多餘位元
  • 從右邊填補 0 的位元

左移 (<<)

9 >> 2 = 2

1001 => 10

維持符號右移 (>>)

  • 把第一個運算元向右移動指定的位元數
  • 丟棄向右移出的多餘位元
  • 從左邊填補在最左邊複製的位元

-14 >> 2 = ?

  1. -14 = 11110010
  2. 向右移動 => 111100
  3. 複製最左邊的位元 => 11111100 => -4
  4. 補位算法:
    • ​​4 = 100 => 00000100
    • ​以2為基礎,3個位置轉換8進位,4個位置轉換16進位
    • 0變1,1變0 => 11111011
    • 最後一位加1 => 11111100

填 0 右移 (>>>)

9 >>> 2 = 2

1001 => 10

  • 把第一個運算元向右移動指定的位元數
  • 丟棄向右移出的多餘位元
  • 從右邊填補 0 的位元
  • 對於非負數而言,補 0 右移和維持符號右移的結果相同

位元位移好像很複雜?

沒關係~

我寫程式到現在沒用過幾次

HW #2

1. 宣告兩個型態為number的數字, 相加後的結果須符合以下運算式, 印出val1

Hint : result === "98" ? val1 : val2

 

2. 宣告兩個分別可以被3和5整除的變數, 當兩個變數都可以被整除時則印出val2

condition ? val1 : val2

Hint : JS的世界裏, 1==true, 0==false

參考資料

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
  • http://wiki.weithenn.org/cgi-bin/wiki.pl?運算式、運算子、運算元
  • http://tr.ilvs.ilc.edu.tw/~bbfish/learn/javascript/jop.htm
Made with Slides.com