Discuss the double exclamation point judgment in js

  • 2020-03-27 00:06:43
  • OfStack

Today look at the qunit source code, found a very strange piece of code, although can understand his meaning, but do not understand the role of double exclamation point.

function id( name ) {
    return !!( typeof document !== "undefined" && document && document.getElementById ) &&
        document.getElementById( name );
}

Then I went to the Internet and looked it up. It was the equivalent of the ternary operator, which returns a Boolean value.

var ret = !!document.getElementById

Is equivalent to:

var ret = document.getElementById ? true : false;  

Returns true for a non-empty string and a non-zero number, or false for an empty string, 0, or null.

var a = " "; alert(!!a);   //true
var a = "s"; alert(!!a);   //true
var a = true; alert(!!a);   //true
var a = 1; alert(!!a);   //true
var a = -1; alert(!!a);   //true
var a = -2; alert(!!a);   //true

var a = 0; alert(!!a);   //false
var a = ""; alert(!!a);   //false
var a = false; alert(!!a);   //false
var a = null; alert(!!a);   //false

Related articles: