The logical NOT operator ("!") is used to convert true to false and vice versa.
! true // expresses false
! false // expresses true
However, it also coerces values. Non zero numbers and non empty strings are true. So they become false.
! 1.0 // expresses false
! 0.0 // expresses true
! '@' // expresses false
! '' // expresses true
Using two NOTs converts it back to the original Boolean value.
!! 1.0 // expresses true
!! 0.0 // expresses false
!! '@' // expresses true
!! '' // expresses false
It's equivalent to calling the Boolean constructor. However, it's faster (no function call overhead), shorter, and more readable.
!! 1.0 === Boolean(1.0) // expresses true