![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=1739283939-9MogXNK2dVDOsunMU3RrQJjZyGhniAP4-0-ce6f15d75c31fa47111bb4b62a1c68ba)
>和<符号分别是“大于”和“小于”的传统符号。它们是二元运算符。应用它们会得到一个布尔值,表示在这种情况下它们是否成立。
字符串可以用相同的方式进行比较。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0001.jpg?sign=1739283939-cb61MEZCcSpCb0fY293WOOEgk1Se5hXd-0-30533d28516c2fc65d07d19c761c3fee)
对字符串排序的方式大致是字母顺序,但不是你所想的在字典中看到的顺序:大写字母总是“小于”小写字母,所以"Z" < "a",而且非字母字符(! 、-,等等)也包括在排序规则中。比较字符串时,JavaScript从左到右遍历字符,逐个比较它们的Unicode代码。
其他类似的运算符是>=(大于或等于), <=(小于或等于), ==(等于)和!=(不等于)。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0002.jpg?sign=1739283939-IasnWVK86aNeAMYq22S5wmVRDR8QrNH5-0-20091409493c6dff91e7f1bd639093b3)
JavaScript中只有一个值不等于它自己,它就是NaN(“不是数字”)。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0003.jpg?sign=1739283939-IzpB4o3RaInfc4oqjSZMpSbJuCoGT0k5-0-3d2cc8eaad860b182f8cf0578d6c03f7)
NaN应该表示无意义计算的结果,因此,它不等于任何其他无意义计算的结果。
1.5.2 逻辑运算符
还有一些操作可以应用于布尔值本身。JavaScript支持三个逻辑运算符:与、或、否。这些运算符可以用来“推理”布尔值。
&&运算符表示逻辑与。它是一个二元运算符,只有当给定的值都为真时,结果才为真。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0004.jpg?sign=1739283939-zfvMMZP4hWAN5RbRvBRqKZ0Xdt2yEq1P-0-af64eb0d04f428298a2fde42b8aefbce)
||运算符表示逻辑或。如果给定的任何一个值为真,则结果为真。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0005.jpg?sign=1739283939-0noYWDbbPE16pWRKSBi5ngSeVpahM6rM-0-7de07bd9dea0fb87185a4b8b7efce278)
逻辑否是用感叹号表示的(!)。它是一个一元运算符,可以对传给它的值取反,! true产生false,而!false得出true。
将这些布尔运算符与算术运算符和其他运算符混合时,何时需要括号并不总是很明显。在实践中,你通常可以了解到目前为止我们已经看到的运算符中,||具有最低优先级,然后是&&,然后是比较运算符(>、==,等等),然后是其余的运算符。选择这样的顺序,是为了在类似下面的典型表达式中,使用尽可能少的括号:
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0027_0006.jpg?sign=1739283939-b38XHCCmEiSw8KTqWIiliGXsi0PRjcLh-0-3870f12bf044abc7516ea40b5367f336)
我将讨论最后一个逻辑运算符,它既不是一元的,也不是二元的,而是三元的,运算于三个值。它用问号和冒号写成,如下所示:
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0028_0001.jpg?sign=1739283939-lQ08A312YpzbcgP3UIlUG9dPvtK4xq1u-0-c439a2822ee8329a98f3516f5d61d959)
这被称为条件运算符(又称三元运算符,它是此语言中唯一的三元运算符)。问号左侧的值“选择”其他两个值中的哪一个将出现。如果左侧的值为true,则选择中间值,如果左侧的值为false,则选择右侧的值。