5. JavaScript 運算子 - ZoeHYH/mentor-program-4th GitHub Wiki

語法解析順序

優先性

相同的優先性再考慮相依性。

相依性

左相依性

右相依性

依運算子需要幾個值分類

一元運算子 Unary Operator

二元運算子 Binary Operator

三元運算子 Ternary Operator

依運算子的功能

算數運算子 Arithmetic Operator

+ - * / % //加、減、乘、除、取餘數

遞增 Increment 遞減 Decrement

a++ b-- // a=a+1 b=b-1 的縮寫
++c --d // 先做 e+1 f-1 再執行整句程式
	console.log(a++ && 30) // 0 ,先印 a 再 +1
	console.log(a) // 1

賦值運算子 Assignment Operator

= // 用來賦與變數值(資料),右相依性,從最後的 = 看起
c+=2 d-=3 // c=c+2 d=d+3 的縮寫
*= /= %=

比較運算子 Comparison Operator

== != // 相等 不相等
> >= < <= // 大於 大於等於 小於 小於等於
=== !=== // 嚴格相等:比較值的型別必須相同

邏輯運算子 Logical Operator

|| && ! // or and not
	!true !false // false true
  • 短路性質

    3 || 10 // 3
    0 || 10 // 10 ,0 視為 false
    3 && 10 // 10 , 因為後面的值決定了整句的真假
    false && 10 // false
    

位元運算子 Bitwise Operator

位元移動運算子

理論上比較快。

5 >> 1 // 2 ,二進位的位數向右移位等於 /2 無條件捨去
5 << 1 // 10 ,二進位的位數向左移位等於 *2

位元邏輯運算子

對二進位每一位數進行位元運算。

10 & 12 // and
/*	1010
	& 1100
	= 1000 即 8 */
10 | 12 // or
/*	1010
	| 1100
	= 1110 即 14 */
10 ^ 12 // Exclusive Or / xor ,同為 0 ,不同為 1
/*  1010
  ^ 1100
	= 0110~12 即 6 */
~10 // not ,每一位數連正負號一起反轉
/* ~ +00...001010
	 = -11...110101 即 -11 */
  • 位元遮罩

    a & 1 // 判斷奇偶
    a & 8 // 二元第三位數判斷
    

字串運算子 String Operator

+ //連接字串
"1" + 2 // "12"

特殊運算子 Special Operator

typeof //辨識型別
() //括號裡的運算式優先
delete //刪除物件中的元素

(三元)條件運算子 Conditional Operator

運算式 ? true 時傳送的值 : false 時傳送的值
判斷式 ? if true 時的 Statement
: 判斷式 ? else if true 時的 Statement
: else 時的 Statement
score >= 60 ? 'pass' : 'fail'

逗號運算子 Comma Operator

隔開多個expression並回傳最後一個expression的結果。

for(var i=0, j=0; i<10; ++i, j+=2) // ; 隔開了陳述句
  sum += i*j;

存取運算子

陣列[序號]
字串[序號]
物件[字串]
物件.字串

展開運算子 Spread Operator

let arr = [1, 2, 3]
let arr2 = [4, 5, 6, ...arr] //把元素傳進去
arr2 // [4, 5, 6, 1, 2, 3]
let obj1 = {a: 1, b: 2}
let obj2 = {...obj1}
obj2 === obj1 // false 記憶體位置不同
  • 其餘參數 Rest Parameters

    let arr = [1, 2, 3, 4, 5]
    let [a, ...arr2] = arr
    console.log(arr2) // [2,3,4,5]
    function func(a, ...arr){} //其餘參數傳成陣列