雙重否定(x)

雙重否定 !! 不是一個獨特的 JavaScript 運算子,也不是一個特殊的語法,而只是一個兩個否定的序列。它用於將任何型別的值轉換為適當的 truefalse 布林值,具體取決於它是真實的還是假的

!!1            // true
!!0            // false
!!undefined    // false
!!{}           // true
!![]           // true

第一個否定將任何值轉換為 false(如果它是真實的)true(如果是假的) 。然後,第二個否定對正常的布林值進行操作。他們一起轉換任何 truthytrue 任何 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 的使用被認為是不好的做法:

  1. 從風格上看,它可能看起來像一個獨特的特殊語法,而實際上除了兩個連續的隱式型別轉換否定之外,它沒有做任何事情。
  2. 最好通過程式碼提供有關儲存在變數和屬性中的值型別的資訊。例如,x !== 0x 可能是一個數字,而 !!x 並沒有向程式碼的讀者傳達任何這樣的優勢。
  3. Boolean(x) 的使用允許類似的功能,並且是型別的更顯式轉換。