The (!) operator is use to perform logical negation on an expression.
The following table illustrates how result is determined.
If expression is 
Then result is 
True 
False 
False 
True 
All unary operators, such as the ! operator, evaluate expressions as follows:

If applied to undefined or null expressions, a runtime error is raised.

Objects are converted to strings.

Strings are converted to numbers if possible. If not, a runtime error is raised.

Boolean values are treated as numbers (0 if false, 1 if true).
The operator is applied to the resulting number.
For the ! operator, if expression is nonzero, result is zero. If expression is zero, result is 1.