逻辑运算符&&(与)

&&(与)

两个 & 符号表示 && 与运算符:

result = a && b;

在传统的编程中,当两个操作数都是真值时,与运算返回 true,否则返回 false

alert( true && true );   // true
alert( false && true );  // false
alert( true && false );  // false
alert( false && false ); // false

带有 if 语句的示例:

let hour = 12;
let minute = 30;

if (hour == 12 && minute == 30) {
  alert( 'Time is 12:30' );
}

与运算的操作数可以是任意类型的值:

if (1 && 0) { // 作为 true && false 来执行
  alert( "won't work, because the result is falsy" );
}

与运算寻找第一个假值

给出多个参加与运算的值:

result = value1 && value2 && value3;

与运算 && 做了如下的事:

  • 从左到右依次计算操作数。
  • 在处理每一个操作数时,都将其转化为布尔值。如果结果是 false,就停止计算,并返回这个操作数的初始值。
  • 如果所有的操作数都被计算过(例如都是真值),则返回最后一个操作数。
    换句话说,与运算返回第一个假值,如果没有假值就返回最后一个值。

上面的规则和或运算很像。区别就是与运算返回第一个假值,而或运算返回第一个真值。

例如:

// 如果第一个操作数是真值,
// 与运算返回第二个操作数:
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5

// 如果第一个操作数是假值,
// 与运算将直接返回它。第二个操作数会被忽略
alert( null && 5 ); // null
alert( 0 && "no matter what" ); // 0

我们也可以在一行代码上串联多个值。查看第一个假值是如何被返回的:

alert( 1 && 2 && null && 3 ); // null

如果所有的值都是真值,最后一个值将会被返回:

alert( 1 && 2 && 3 ); // 3,最后一个值

与运算 && 在或运算 || 之前进行
与运算 && 的优先级比或运算 || 要高。
所以代码 a && b || c && d&& 表达式加了括号完全一样:(a && b) || (c && d)

不要用 || && 来取代 if

有时候,有人会将与运算符 && 作为“简化 if”的一种方式。

例如:

let x = 1;

(x > 0) && alert( 'Greater than zero!' );

&& 右边的代码只有运算抵达到那里才能被执行。也就是,当且仅当 (x > 0) 为真。

所以我们基本可以类似地得到:

let x = 1;

if (x > 0) alert( 'Greater than zero!' );

虽然使用 && 写出的变体看起来更短,但 if 更明显,并且往往更具可读性。因此,我们建议根据每个语法结构的用途来使用:如果我们想要 if,就使用 if;如果我们想要逻辑与,就使用 &&

拓展

  1. 下面这段代码将会显示什么?
alert( 1 && null && 2 );

答案:null,因为它是列表中第一个假值。

  1. 与运算连接的 alert 的结果是什么?
alert( alert(1) && alert(2) );

答案:1,然后 undefined
调用 alert 返回了 undefined(它只展示消息,所以没有有意义的返回值)。

因此,&& 计算了它左边的操作数(显示 1),然后立即停止了,因为 undefined 是一个假值。
&& 就是寻找假值然后返回它,所以运算结束。

  1. 或运算、与运算、或运算串联的结果
alert( null || 2 && 3 || 4 );

答案:3
与运算 && 的优先级比 || 高,所以它第一个被执行。
结果是 2 && 3 = 3,所以表达式变成了:

null || 3 || 4

或运算是从左到右运算,寻找第一个真值并返回。现在的结果就是第一个真值:3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值