JavaScript 運算式與運算子 & 型別轉換筆記二

Thomas Hung
Thomas 學習筆記
5 min readApr 27, 2020
Photo by Dean Pugh on Unsplash

位元運算子

位元運算子被轉化為 32 bits的整數,並以二進位(0、1)的形式做處理,並將超過32 bits的整數捨棄多餘位元,運算後回傳數值。

轉換之前:  11100110111110100000000000000110000000000001
轉換之後: 10100000000000000110000000000001

例如 8二進制表示法為 1000 , 5二進制表示法為 0101 ,並以 toString(2)

轉換二進制。

let a = 8
let b = 5
a.toString(2) // "1000"
b.toString(2) // "0101"

因此在使用位元運算子結果如下:

8 & 5 // 將1000與0101轉二進制(bit)後做AND運算 結果0000 8 | 5 // 將1000與0101轉二進制(bit)後做OR運算  結果11018 ^ 5 // 將1000與0101轉二進制(bit)後做XOR運算 結果1101 

XOR運算子(^)

兩個二進制位元(0、1),兩者不一樣時才等於1,其於是0

1 ^ 0 //1
0 ^ 1 //1
0 ^ 0 //0
1 ^ 1 //0

XOR運算子(~)

將二進制位元的值反轉,0轉為1,1轉為0。

let a=8 
let b=5
~a // -9
~b // -6

簡單說因為二補數的關係,得到的值必須為原來的值再+1,接著因為最左邊的判斷正負的 bit 從 0 被轉為 1,故得負值。所以 ~8 會得到 -9。

左移運算(>>)

將第一個運算元的二進制位元(bit)向左移n位,第二個運算元為向左移位的數值,並右邊空出來的位元以 0 補齊,保持正負數一致。

8 << 2 //32 ,8的二進制位元為 1000 向左移位二位元後 00100000

右移運算(<<) & 右移運算(<<<)

將第一個運算元的二進制位元(bit)向右移n位,第二個運算元為向右移位的數值,並左邊空出來的位元以 0 補齊,保持正負數一致。

但右移運算(<<<),並左邊空出來的位元以 0 補齊,只有正數。

5 >> 2 //1 ,5的二進制位元為 0101 向右移位二位元後 0001
-5 >>> 2 //1073741822 ,5的二進制位元為 -0101 向右移位二位元後 1111...1110

邏輯運算子

用布林值 ( Boolean )來做邏輯判斷並回傳結果 truefalse

如果運算元值是布林就做判斷結果,運算元不是布林值時,先透過Boolean() 轉換後再做判斷。

邏輯 AND ( && )

(條件/運算式A) && (條件/運算式B),當 && 兩邊運算元都是 true ,則回傳true ,但有任一方為 false 則回傳false

let a = 123
let b = "abc"
let c = null
let d = undefined
console.log( a && b ) // "abc"
console.log( b && c ) // null
console.log( d && c ) // undefined

若第一個運算元是 true ,回傳第二個運算元,否則回傳第一個運算元。

因為 && 尋找 false 布林值。

邏輯 OR ( || )

(條件/運算式A) || (條件/運算式B),當 ||兩邊運算元都是 true ,則回傳true ,但只有在兩邊為 false 才會回傳false

let a = 123
let b = "abc"
let c = null
let d = undefined
console.log( a || b ) // 123
console.log( b || c ) // "abc"
console.log( c || d ) // undefined

若第一個運算元是 true ,回傳第一個運算元,否則回傳第二個運算元。

因為 || 尋找 true 布林值。

邏輯 NOT( ! )

truefalse 做反轉,如一開始是 true 反轉為 false ,反之 false 反轉為 true

可使用 !! 來取代 Boolean() 即可判斷某值布林的結果。

!true   // false
!false // true
!!'false' == !!'true' // true

短路解析

運算式是由左向右判斷的, 會以下列規則進行 短路判斷:

  • false && 任何值 => 結果都是 false 可用來執行某條件成立時才做某件事,類似 if 判斷式。
  • true || 任何值 => 結果都是 true 可用來設定變數的初使值。

條件(三元)運算子

這個運算式是由一個問號 ?及一個冒號 :組成的。運算式中有兩個運算元的值,語法如下:

條件 ? 值1 : 值2

若條件成立為 true 回傳值1,否則回傳值2。

let money = 10000000000;
let ans = ( money > Infinity ) ? alert('我有錢') : alert('我很窮')

逗點運算子

主要是讓逗號可以分隔運算式(由左至右),並且回傳最後的運算式的值。

如果需要在一個運算式裡包含多組運算元,就可以用逗號來分隔。

常出現的地方是 for 迴圈如下:

for (let i = 0, j = 10; i < 10; i++, j--) {...}

運算子優先級

下列列出運算子的優先, 從高到低。

也可以使用括號來強制指定優先級。

參考:運算式與運算子運算子優先序

以上是我對運算式與運算子 & 型別轉換筆記 學習筆記 二 😉。

***如果有任何想法,也歡迎留言與我分享~***

--

--

Thomas Hung
Thomas 學習筆記

when you feel like quitting,think about why you started.