雙重否定(x)
雙重否定 !!
不是一個獨特的 JavaScript 運算子,也不是一個特殊的語法,而只是一個兩個否定的序列。它用於將任何型別的值轉換為適當的 true
或 false
布林值,具體取決於它是真實的還是假的。
!!1 // true
!!0 // false
!!undefined // false
!!{} // true
!![] // true
第一個否定將任何值轉換為 false
(如果它是真實的) 和 true
(如果是假的) 。然後,第二個否定對正常的布林值進行操作。他們一起轉換任何 truthy 值 true
任何 falsy 價值 false
。
但是,許多專業人士認為使用這種語法的做法是不可接受的,並建議更簡單的閱讀替代方案,即使他們寫的時間更長:
x !== 0 // instead of !!x in case x is a number
x != null // instead of !!x in case x is an object, a string, or an undefined
由於以下原因,!!x
的使用被認為是不好的做法:
- 從風格上看,它可能看起來像一個獨特的特殊語法,而實際上除了兩個連續的隱式型別轉換否定之外,它沒有做任何事情。
- 最好通過程式碼提供有關儲存在變數和屬性中的值型別的資訊。例如,
x !== 0
說x
可能是一個數字,而!!x
並沒有向程式碼的讀者傳達任何這樣的優勢。 Boolean(x)
的使用允許類似的功能,並且是型別的更顯式轉換。