引言
大家都知道逻辑运算符,也知道它们可以判断两个式子的true or false,如果对它们的了解不多的话会认为它们的返回是就是true or false,那它们的返回值到底是什么呢?让我们一起来看看吧~
逻辑运算符
我们都知道在 JavaScript 中,逻辑运算符会返回布尔值 true
或 false
。JavaScript 中的逻辑运算符有三种:&&(与)
、||(或)
和!(非)
。这些运算符主要用于判断多个条件的关系。
在 JavaScript 中,逻辑运算符的使用方法如下:
-
&&(与)
:当左右两个表达式都为true
时,返回true
;否则返回 false。 -
||(或)
:当左右两个表达式至少有一个为true
时,返回true
;否则返回 false。 -
!(非)
:对表达式取反,即如果表达式为true
,则返回false
,否则返回true
。 -
例如,我们可以使用以下代码来演示 JavaScript 中逻辑运算符的使用:
arduino
const x = 3;
const y = 5;
const z = 7;
// && 运算符
console.log(x < y && y < z); // 输出 true
console.log(x < y && y > z); // 输出 false
// || 运算符
console.log(x > y || y < z); // 输出 true
console.log(x > y || y > z); // 输出 false
// ! 运算符
console.log(!(x < y)); // 输出 false
console.log(!(x > y)); // 输出 true
我们从上面的代码中可以看出,在 JavaScript 中,逻辑运算符返回的都是布尔值true
或 false
。通过逻辑运算符,我们可以将多个表达式进行组合判断,从而得到最终的结果。
这么看没问题吧,确实是都返回true
和false
,但是看到进度条你会发现事情不太对劲,难道还有别的说法?让我们继续往下看吧~
逻辑运算符的特性
逻辑或
然而,JavaScript 中的逻辑或运算符 ||
还有一个特殊的行为,会返回其操作数中的第一个被解释为true
的值,如果所有操作数都是false
或者 undefined
,则返回最后一个操作数。这个特性有时候会在编程中带来意想不到的效果。例如存在true
时,逻辑或运算符||将会返回第一个true
:
js
let a = 10
console.log(a || 0); // 输出 10
没错逻辑或运算符的返回值是10
,而不是true
,这也就是所说的逻辑或运算符||
会返回其操作数中第一个被解释为true
的值,为什么是第一个其实也很简单。
在使用逻辑或运算符时,如果第一个操作数被解释为 true
,那么第二个操作数将不会被计算;在使用逻辑与运算符时,如果第一个操作数被解释为 false
,那么第二个操作数将不会被计算。这种行为被称为"短路求值"
,它可以提高程序的效率和性能。
这也就是逻辑或运算符只要遇到true
后面的内容就不会在判断的特性的又来,所以说遇到第一个true
之后,后续的根本不进行判断,那么返回的是第一个true
合情合理吧。
同理如果全为false
那么就会返回最后一个操作数:
ini
const x = '';
const y = null;
const z = undefined;
console.log(x || y || z || 'default'); // 输出 'default'
在上面的代码中,x
、y
和 z
都被解释为 false
,因此逻辑或运算符将返回 'default'
。
另外大家应该都知道吧,如果不知道我就补充一下,如果逻辑运算符的操作数不是布尔值,JavaScript 引擎会将其自动转换为布尔值,然后再进行运算。具体来说,以下值会被转换为false
:
- false
- 0 和 -0
- 空字符串 '' 和 ""(即长度为 0 的字符串)
- null
- undefined
- NaN
除了以上值之外,其他所有值都会被转换为true
。
不过既然逻辑或的返回值是这样的,那么逻辑与呢?它也有这样的特性吗?
逻辑与
其实在 JavaScript 中,大家猜也能猜到,逻辑与运算符&&
不会像逻辑或运算符那样返回其操作数中的第一个被解释为true
的值。因为逻辑与运算符 && 只有在左右两个操作数都被解释为true
时,才会返回true
;否则,它会返回false
。
那我们可就要考虑它是怎么个返回法了,我们先试一试两个true值会返回什么:
js
let a = 10
console.log(a && 1); // 输出 1
大家猜对了没,其实很好理解,同理嘛,只有找到最后一个true
的时候才会判定为true
,所以返回最后一个true
合情合理,最后一个true
的值是1
按照逻辑或的特性类比一下,就是返回1没错,那就说明逻辑与也存在这个特性。
那我们就可以猜到它肯定是返回第一个false
的值了,来试试:
ini
const x = 'hello';
const y = 0;
console.log(x && 'default'); // 输出 'default'
console.log(y && 1); // 输出 0
在上面的代码中,x 被解释为 true,因此表达式 x && 'default' 的结果为 'default'。而 y 被转换为 false,因此表达式 y && 1 的结果为 0。
没错了,这不就是在使用逻辑与运算符时的"短路求值"
嘛,如果第一个操作数被解释为 false
,那么第二个操作数将不会被计算。这是因为在逻辑与运算中,只有左右两个操作数都被解释为 true
,整个表达式才会返回 true
。
不过逻辑非就没有这种说法了,大家有兴趣可以自己尝试一下~
总结
总之,逻辑运算符返回的并不全是布尔值 true 或 false,在 JavaScript 中,逻辑与运算符 && 和 逻辑或运算符||会返回其操作数中 true 或者 false 对应的值。而且因为短路求值的行为,返回值的先后并不相同。
那么这篇文章就到这里结束啦~
如果你想了解更多这类文章,点赞关注作者更新更多~