3.3 布尔值
布尔值指代真或假、开或关、是或否。这个类型只有两个值,保留字 true 和 false 。
JavaScript 程序中的比较语句的结果通常都是布尔值,例如:
a==4
这段代码用来检测变量 a 的值是否等于 4。如果等于,比较结果的布尔值就是 true;如果不等,比较结果则为 false。
布尔值通常用于 JavaScript 中的控制结构中。例如,JavaScript 中的 if/else 语句,如果布尔值为 true 执行第一段逻辑,如果为 false 执行另一段逻辑。通常将一个创建布尔值的比较直接与使用这个比较的语句结合在一起,结果如下所示:
if (a == 4)
b = b + 1;
else
a = a + 1;
这段代码检测变量 a 是否等于 4 。如果等于,则 b 加 1 ,否则,a 加 1 。任意 JavaScript 的值都可以转换为布尔值。下面这些值会被转换成 false:
undefined
null
0
-0
NaN
"" //空字符串
所有其他值,包括所有对象(数组)都会转换成 true。false 和上面6个可以转换成 false 的值有时称做“假值”(falsy value),其他值称做“真值”(truthy value),JavaScript 期望使用一个布尔值的时候,假值会被当成 false,真值会被当成 true。
来看一个例子,假设变量 o 是一个对象或是 null,可以通过一条if语句来显式地检测 o 是否是非 null 值:
if (o !== null)...
不等操作符“!==”将o和null比较,并得出结果为true或false。可以先忽略这里的比较语句,null是一个假值,对象是一个真值:
if (0) ...
对于第一种情况,只有当 o 不是 null 时才会执行 if 后的代码,第二种情况的限制没那么严格:只有 o 不是 false 或任何假值(比如 null 或 undefined )时它才会执行这个if。到底选用哪条语句取决于期望赋给的值是什么。如果需要将 null 与o或""区分开来,则需要使用一个显式的比较。
布尔值包含 toString() 方法,因此可以使用这个方法将字符串转换为“true”或 “false”,但它并不包含其他有用的方法。除了这个不重要的API,还有三个重要的布尔运算符。
“&&”运算符执行了逻辑与(AND)操作。当且仅当两个操作数都是真值时它才返回true;否则返回false。“||”运算符是布尔或(OR)操作,如果两个操作数其中之一为真值它就返回true,如果两个操作数都是假值则返回false。最后,一元操作符“!”执行了布尔非(NOT)操作:如果操作数是真值则返回false,如果是假值,则返回true。比如:
if ((x == 0 && y == 0) || !(z == 0)) {
// x和y都是零或z是非零
}