邏輯運算子 - daniel-qa/Vue GitHub Wiki

!!value

// 雙驚嘆號:強制轉成 boolean
!!value  // 等同 Boolean(value)

對資料庫儲存上,存為 boolean 型別非常重要

不轉 boolean 直接存,會有這些問題 假設欄位是 BIT / BOOLEAN 型別:

// 原始值是數字或字串
let value = 1        // truthy
let value = "true"   // truthy
let value = 0        // falsy

直接丟進去,資料庫可能會:

報錯:型別不符,拒絕寫入
存成意外的值:隱式轉型結果不可預期(看 ORM / Driver 怎麼處理)
存成字串 "true":之後讀出來比對會出錯

!!value 其實不是什麼「特別語法」,而是一個JavaScript 的慣用技巧(idiom)。

    1. 本質是什麼?

!!value

等價於:

Boolean(value)

  1. 它是怎麼來的?

因為在 JavaScript 裡:

!value → 會先轉 boolean,再取反

!!value → 再取一次反 → 變回 boolean

  1. 拆解過程

假設:

value = "hello"

第一步:

!value

結果:

false (因為 "hello" 是 truthy)

第二步:

!!value

變成:

true

  1. 行為規則(很重要)

JavaScript 的 truthy / falsy:

falsy 值
false
0
""
null
undefined
NaN

其他都是 truthy

"0"
[]
{}
"hello"
123
  1. !! 的用途

就是:

把任何值「標準化成 true / false」

  1. 常見寫法對照
Boolean(value)
value ? true : false
!!value

👉 三個完全等價

  1. 為什麼工程師愛用 !!

因為:

短
快
inline
常用於資料清洗

例如你那行:

exerciseItem.isZhuyin = !!this.$refs.single.stemEditor.isZhuyinFont

就是:

保證存進 DB 的一定是 boolean

(對 Cosmos DB 這種 schema-less 特別重要)

  1. 一句話記法

!!value = 強制轉成乾淨 boolean(true / false)