邂逅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 = ?
- -14 = 11110010
- 向右移動 => 111100
- 複製最左邊的位元 => 11111100 => -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
邂逅JS - Lesson 3 Operators 運算子
By Terrence Toh
邂逅JS - Lesson 3 Operators 運算子
內訓課程
- 1,165