pcwu's TIL Notes


[JS] 雙驚嘆號的作用

雙驚嘆號(!!)第一次在別人的code裡看到時直覺上覺得沒什麼必要,就反轉再反轉,不太理解其作用,後來偶然看到別人說明才知道其作用。

驚嘆號(!)是個邏輯運算符,名稱為”Logic NOT”,用在布林值上具有反轉(Inverted)的功能,雙驚嘆號(!!)就等於”反轉再反轉“,等於轉回原本的布林值:

const aBool = true
const bBool = !aBool // false
const cBool = !!aBool // true

雙驚嘆號(!!)並不單純是在這樣用的,它是為了要轉換一些可以形成布林值的情況值,列出如下:

const aBool = !!0 // false
const bBool = !!'false' // true
const cBool = !!NaN // false

經過雙驚嘆號運算後,只會很單純出現 truefalse 兩種,可以單純化減少某些特別情況時的出錯機會。

例如希望''null 被視為完全相同時:

const a = ''
const b = null

a === b // false
!!a === !!b // true

關於 Falsy (0, -0, null, false, NaN, undefined, '')之間的差異,可以參考:

http://stackoverflow.com/questions/801032/why-is-null-an-object-and-whats-the-difference-between-null-and-undefined

Reference