The boolean primitive is a logical data type with only two values: `true` and
`false`.

## Boolean object

All values in JavaScript are implicitly `true` or `false`. The `Boolean` object
can be used to [coerce](https://web.dev/learn/javascript/introduction#weak-typing) a value to a
`true` or `false` boolean, based on the implicit true or false state of that
value:

    Boolean( "A string literal" );
    > true

Values that result in `false` include `0`, `null`, `undefined`, `NaN`, an empty
string (`""`), an omitted value, and a `false` boolean. All other values result
in `true`.

    Boolean( NaN );
    > false

    Boolean( -0 );
    > false

    Boolean( 5 );
    > true

    Boolean( "false" ); // the value `"false"` is a string, and therefore implicitly true.
    > true

Avoid using the `Boolean` object as a constructor. It creates an *object*
containing a boolean value, not the boolean primitive you might expect:

    const falseBoolean = Boolean( 0 );
    const falseObject = new Boolean( 0 );

    console.log( falseBoolean  );
    > false

    console.log( falseObject  );
    > Boolean { false }

    falseObject.valueOf();
    > false

Because all objects are inherently [truthy](https://web.dev/learn/javascript/comparison#truthy-falsy),
the resulting boolean object always loosely evaluates to true, even if it
contains a `false` value:

    const falseBoolean = Boolean( 0 );
    const falseObject = new Boolean( 0 );

    console.log( falseBoolean == true );
    > false

    console.log( falseObject == true );
    > false

    console.log( !!falseObject );
    > true

## Check your understanding

Which of the following returns `false`?
An empty string `0` `null` `"none"`