邏輯運算子 - 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)。
-
- 本質是什麼?
!!value
等價於:
Boolean(value)
- 它是怎麼來的?
因為在 JavaScript 裡:
!value → 會先轉 boolean,再取反
!!value → 再取一次反 → 變回 boolean
- 拆解過程
假設:
value = "hello"
第一步:
!value
結果:
false (因為 "hello" 是 truthy)
第二步:
!!value
變成:
true
- 行為規則(很重要)
JavaScript 的 truthy / falsy:
falsy 值
false
0
""
null
undefined
NaN
其他都是 truthy
"0"
[]
{}
"hello"
123
- !! 的用途
就是:
把任何值「標準化成 true / false」
- 常見寫法對照
Boolean(value)
value ? true : false
!!value
👉 三個完全等價
- 為什麼工程師愛用 !!
因為:
短
快
inline
常用於資料清洗
例如你那行:
exerciseItem.isZhuyin = !!this.$refs.single.stemEditor.isZhuyinFont
就是:
保證存進 DB 的一定是 boolean
(對 Cosmos DB 這種 schema-less 特別重要)
- 一句話記法
!!value = 強制轉成乾淨 boolean(true / false)