![JavaScript编程精解(原书第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/171/30573171/b_30573171.jpg)
1.5 布尔值
拥有一个仅区分两种可能性的值通常很有用,例如“是”和“否”或“打开”和“关闭”。为此,JavaScript具有一个布尔类型,它只有true和false这两个可能的值,它们都被写为英语单词。
1.5.1 比较
以下是生成布尔值的一种方法:
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0026_0004.jpg?sign=1739197473-BN8vBeqKjF9erS4F62UQMemejJ46l7lU-0-ec9006a4ca277fad6458df624afe78fd)
>和<符号分别是“大于”和“小于”的传统符号。它们是二元运算符。应用它们会得到一个布尔值,表示在这种情况下它们是否成立。
字符串可以用相同的方式进行比较。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0001.jpg?sign=1739197473-r3gTPgE3GwMwf6tdCV1t5LoOe2TyfEja-0-076698fc164d26f5e2d5363452296cb9)
对字符串排序的方式大致是字母顺序,但不是你所想的在字典中看到的顺序:大写字母总是“小于”小写字母,所以"Z" < "a",而且非字母字符(! 、-,等等)也包括在排序规则中。比较字符串时,JavaScript从左到右遍历字符,逐个比较它们的Unicode代码。
其他类似的运算符是>=(大于或等于), <=(小于或等于), ==(等于)和!=(不等于)。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0002.jpg?sign=1739197473-D34yjHcEjiu9Uh6mnULHN6BT0BNOKRxn-0-aff8a90f105cd17ac84f51d82fb2eef9)
JavaScript中只有一个值不等于它自己,它就是NaN(“不是数字”)。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0003.jpg?sign=1739197473-z9v3CwCZUEwbPyNlhoeY7Y90Jp88QNIQ-0-7eeab91af18de1df00dbba647063200a)
NaN应该表示无意义计算的结果,因此,它不等于任何其他无意义计算的结果。
1.5.2 逻辑运算符
还有一些操作可以应用于布尔值本身。JavaScript支持三个逻辑运算符:与、或、否。这些运算符可以用来“推理”布尔值。
&&运算符表示逻辑与。它是一个二元运算符,只有当给定的值都为真时,结果才为真。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0004.jpg?sign=1739197473-36LY3vxokNmYUhXPTlLdHw4jenzUdmIl-0-fdf80a3dbaea3cb4dd8ebbfe19b40167)
||运算符表示逻辑或。如果给定的任何一个值为真,则结果为真。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0005.jpg?sign=1739197473-c4gmZibSe0RXKzu3XOMl7RcaycYINP9U-0-94a5568f399e067f01a547de9cc7f918)
逻辑否是用感叹号表示的(!)。它是一个一元运算符,可以对传给它的值取反,! true产生false,而!false得出true。
将这些布尔运算符与算术运算符和其他运算符混合时,何时需要括号并不总是很明显。在实践中,你通常可以了解到目前为止我们已经看到的运算符中,||具有最低优先级,然后是&&,然后是比较运算符(>、==,等等),然后是其余的运算符。选择这样的顺序,是为了在类似下面的典型表达式中,使用尽可能少的括号:
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0006.jpg?sign=1739197473-keaza4SPobTtcjWjXKm8nLmyiVnSL18J-0-072f033f9ae6b9f321abae8a93172be9)
我将讨论最后一个逻辑运算符,它既不是一元的,也不是二元的,而是三元的,运算于三个值。它用问号和冒号写成,如下所示:
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0028_0001.jpg?sign=1739197473-ldmUmAFwJtRuDzo8NVdusfEM58wR492N-0-720d79b4f269e44513d138768d7f62a2)
这被称为条件运算符(又称三元运算符,它是此语言中唯一的三元运算符)。问号左侧的值“选择”其他两个值中的哪一个将出现。如果左侧的值为true,则选择中间值,如果左侧的值为false,则选择右侧的值。