The Boolean
object represents a truth value: true
or false
.
The Boolean
object represents a truth value: true
or false
.
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.
Many built-in operations that expect booleans first coerce their arguments to booleans. The operation can be summarized as follows:
undefined
turns into false
.null
turns into false
.0
, -0
, and NaN
turn into false
; other numbers turn into true
.0n
turns into false
; other BigInts turn into true
.""
turns into false
; other strings turn into true
.true
.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.
!!x
negates x
twice, which converts x
to a boolean using the same algorithm as above.Boolean()
function: Boolean(x)
uses the same algorithm as above to convert x
.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
, and null
are falsy but not loosely equal to false
."0"
(and other string literals that are not ""
but get coerced to 0) is truthy but loosely equal to false
.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
.
Boolean()
Creates a new Boolean
object.
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 Boolean
instances, the initial value is the Boolean
constructor.
Boolean.prototype.toString()
Returns a string of either true
or false
depending upon the value of the object. Overrides the Object.prototype.toString()
method.
Boolean.prototype.valueOf()
Returns the primitive value of the Boolean
object. Overrides the Object.prototype.valueOf()
method.
const bNoParam = new Boolean(); const bZero = new Boolean(0); const bNull = new Boolean(null); const bEmptyString = new Boolean(""); const bfalse = new Boolean(false);
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({});
Specification |
---|
ECMAScript Language Specification # sec-boolean-objects |
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 |
© 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