make its decision. Also various operators internally type-convert their operands to boolean in order to determine what action to take. These include the logical operators like AND ( && ), OR ( || ) and NOT ( ! ). The NOT operator type-converts its operand to boolean and if that value is boolean true it returns false and if false it returns true. As the result of a NOT operation is a boolean value that is the inverse of the type-converted true-ness of its operand, two NOT operations together will return a boolean value that is equivalent to the result of type-converting the operand to boolean:- var boolValue = !!x; That technique has been used to generate the following tables. An alternative method of generating a boolean value that represents the type-converted true-ness of a value is to pass that value to the Boolean constructor called as a function:- var boolValue = Boolean(x); Double NOT (!!col) : Numeric Values. -1.6 -0 +0 1 1.6 8 16 16.8 123e-2 -Infinity +Infinity NaN !!col true false false true true true true true true true true false When numbers are converted to boolean, zero becomes false and all other numbers are true. With the excepting of the special numeric value NaN (Not a Number) which is used when another type is converted to a number but that conversion does not result in a meaningful number. NaN is always false. The values of positive and negative infinity, while not finite numbers, are non-zero numeric