js你不是的那些基础问题-布尔运算符
1 且运算符(&&)
且运算符(&&
)往往用于多个表达式的求值
它的运算规则是:如果第一个运算子的布尔值为true
,
则返回第二个运算子的值(注意是值,不是布尔值);如果第一个运算子的布尔值为false
,
则直接返回第一个运算子的值,且不再对第二个运算子求值。
't' && '' // ""
't' && 'f' // "f"
't' && (1 + 2) // 3
'' && 'f' // ""
'' && '' // ""
var x = 1;
(1 - 1) && ( x += 1) // 0
x // 1
上面代码的最后一个例子,由于且运算符的第一个运算子的布尔值为false
,
则直接返回它的值0
,而不再对第二个运算子求值,所以变量x
的值没变。
这种跳过第二个运算子的机制,被称为“短路”。有些程序员喜欢用它取代if
结构,
比如下面是一段if
结构的代码,就可以用且运算符改写。
2 或运算符(||)
或运算符(||
)也用于多个表达式的求值。它的运算规则是:
如果第一个运算子的布尔值为true
,则返回第一个运算子的值,且不再对第二个运算子求值;
如果第一个运算子的布尔值为false
,则返回第二个运算子的值。
't' || '' // "t"
't' || 'f' // "t"
'' || 'f' // "f"
'' || '' // ""
短路规则对这个运算符也适用。
var x = 1;
true || (x = 2) // true
x // 1
3 三元条件运算符(?:)
三元条件运算符由问号(?)和冒号(:)组成,分隔三个表达式。
它是 JavaScript 语言唯一一个需要三个运算子的运算符。
如果第一个表达式的布尔值为true
,则返回第二个表达式的值,否则返回第三个表达式的值。
't' ? 'hello' : 'world' // "hello"
0 ? 'hello' : 'world' // "world"
文章内容转自 阮一峰老师 JavaScript教程 https://wangdoc.com/javascript/index.html