#  Chapter 3Variables and Data Types ## 3.4 boolean Values

The number and string data types have an infinite number of possible values. The boolean data type, on the other hand, has only two. As we saw in Chapter 2, Lexical Structure, the two legal boolean values are the keywords true and false. A boolean value represents a "truth value"--it says whether something is true or not.

boolean values are generally the result of comparisons we make in our JavaScript programs. For example, when we write:

```a == 4
```
we are testing to see if the value of the variable a is equal to the number 4. If it is, then the result of this comparison is the boolean value true. If a is not equal to 4, then the result of the comparison is false. If boolean values are usually generated by comparisons, they are generally used in JavaScript control structures. For example, the if/else statement in JavaScript will perform one action if a boolean value is true and another action if the value is false. Generally, we will combine a comparison that creates a boolean value directly with a statement that uses it. The result looks like this:

```if (a == 4)
b = b + 1;
else
a = a + 1;
```
This code checks if a equals 4. If so, it adds 1 to b; otherwise, it adds 1 to a.

Instead of thinking of the two possible boolean values as true and false, it is sometimes convenient to think of them as "on" (true) and "off" (false) or "yes" (true) and "no" (false). Sometimes it is even useful to consider them equivalent to 1 (true) and 0 (false). (In fact, JavaScript does just this and converts true and false to 1 and 0 when necessary.)

C and C++ programmers should note that JavaScript has a distinct boolean data type, unlike C and C++ which simply use integer values to simulate boolean values. Java programmers should note that although JavaScript has a boolean type, it is not nearly as "pure" as the Java boolean data type--JavaScript boolean values are easily converted to and from other data types, and so in practice, the use of boolean values is much more like their use in C and C++ than in Java. 