The Boolean object represents a truth value: true or false.
On this page
Boolean
Description
Boolean primitives and Boolean objects
Do not confuse the primitive Boolean values true and false with the true and false values of the Boolean object.
Any object, including a Boolean object whose value is false, evaluates to true when passed to a conditional statement. For example, the condition in the following if statement evaluates to true:
const x = new Boolean(false);
if (x) {
// this code is executed
}
This behavior does not apply to Boolean primitives. For example, the condition in the following if statement evaluates to false:
const x = false;
if (x) {
// this code is not executed
}
Do not use the Boolean() constructor with new to convert a non-boolean value to a boolean value — use Boolean as a function or a double NOT instead:
const good = Boolean(expression); // use this
const good2 = !!expression; // or this
const bad = new Boolean(expression); // don't use this!
If you specify any object, including a Boolean object whose value is false, as the initial value of a Boolean object, the new Boolean object has a value of true.
const myFalse = new Boolean(false); // initial value of false
const g = Boolean(myFalse); // initial value of true
const myString = new String("Hello"); // string object
const s = Boolean(myString); // initial value of true
Warning: You should rarely find yourself using Boolean as a constructor.
Boolean coercion
Many built-in operations that expect booleans first coerce their arguments to booleans. The operation can be summarized as follows:
- Booleans are returned as-is.
undefinedturns intofalse.nullturns intofalse.0,-0, andNaNturn intofalse; other numbers turn intotrue.0nturns intofalse; other BigInts turn intotrue.- The empty string
""turns intofalse; other strings turn intotrue. - Symbols turn into
true. - All objects become
true.
Note: A legacy behavior makes document.all return false when used as a boolean, despite it being an object. This property is legacy and non-standard and should not be used.
Note: Unlike other type conversions like string coercion or number coercion, boolean coercion does not attempt to convert objects to primitives.
In other words, there are only a handful of values that get coerced to false — these are called falsy values. All other values are called truthy values. A value's truthiness is important when used with logical operators, conditional statements, or any boolean context.
There are two ways to achieve the same effect in JavaScript.
- Double NOT:
!!xnegatesxtwice, which convertsxto a boolean using the same algorithm as above. - The
Boolean()function:Boolean(x)uses the same algorithm as above to convertx.
Note that truthiness is not the same as being loosely equal to true or false.
if ([]) {
console.log("[] is truthy");
}
if ([] == false) {
console.log("[] == false");
}
// [] is truthy
// [] == false
[] is truthy, but it's also loosely equal to false. It's truthy, because all objects are truthy. However, when comparing with false, which is a primitive, [] is also converted to a primitive, which is "" via Array.prototype.toString(). Comparing strings and booleans results in both being converted to numbers, and they both become 0, so [] == false is true. In general, falsiness and == false differ in the following cases:
NaN,undefined, andnullare falsy but not loosely equal tofalse."0"(and other string literals that are not""but get coerced to 0) is truthy but loosely equal tofalse.- Objects are always truthy, but their primitive representation may be loosely equal to
false.
Truthy values are even more unlikely to be loosely equal to true. All values are either truthy or falsy, but most values are loosely equal to neither true nor false.
Constructor
-
Boolean() -
Creates a new
Booleanobject.
Instance properties
These properties are defined on Boolean.prototype and shared by all Boolean instances.
-
Boolean.prototype.constructor -
The constructor function that created the instance object. For
Booleaninstances, the initial value is theBooleanconstructor.
Instance methods
-
Boolean.prototype.toString() -
Returns a string of either
trueorfalsedepending upon the value of the object. Overrides theObject.prototype.toString()method. -
Boolean.prototype.valueOf() -
Returns the primitive value of the
Booleanobject. Overrides theObject.prototype.valueOf()method.
Examples
Creating Boolean objects with an initial value of false
const bNoParam = new Boolean();
const bZero = new Boolean(0);
const bNull = new Boolean(null);
const bEmptyString = new Boolean("");
const bfalse = new Boolean(false);
Creating Boolean objects with an initial value of true
const btrue = new Boolean(true);
const btrueString = new Boolean("true");
const bfalseString = new Boolean("false");
const bSuLin = new Boolean("Su Lin");
const bArrayProto = new Boolean([]);
const bObjProto = new Boolean({});
Specifications
| Specification |
|---|
| ECMAScript Language Specification # sec-boolean-objects |
Browser compatibility
| Desktop | Mobile | Server | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | Deno | Node.js | ||
Boolean |
1 | 12 | 1 | 4 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1.0 | 0.10.0 | |
Boolean |
1 | 12 | 1 | 3 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1.0 | 0.10.0 | |
toString |
1 | 12 | 1 | 4 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1.0 | 0.10.0 | |
valueOf |
1 | 12 | 1 | 4 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1.0 | 0.10.0 | |
See also
- Boolean
- Boolean primitives
- Boolean data type on Wikipedia
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean