布尔操作符-逻辑与(&&)

141 阅读2分钟

逻辑与操作符由两个和号(&&)表示,有两个操作数,如下面的例子所示: let love = true && false;

逻辑与的真值表如下:

xxxxxxxx54.png

逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况 下,逻辑与操作就不一定返回布尔值;此时,它遵循下列规则:

 如果第一个操作数是对象,则返回第二个操作数;

 如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该 对象;

 如果两个操作数都是对象,则返回第二个操作数;

 如果有一个操作数是 null,则返回 null;

 如果有一个操作数是 NaN,则返回 NaN;

 如果有一个操作数是 undefined,则返回 undefined。

逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。 对于逻辑与操作而言,如果第一个操作数是 false,则无论第二个操作数是什么值,结果都不再可能是 true 了。来看下面的例子:

let love = true;

let life = (love && car); // 这里会发生错误,应为car没有被定义

alert(life); // 这一行不会执行

在上面的代码中,当执行逻辑与操作时会发生错误,因为变量 car 没有声明。由于变量 love 的值是 true,所以逻辑与操作符会继续对变量 car 求值。但 car 尚未定义,因此就会导致错误。这说明不能在逻辑与操作中使用未定义的值。如果像下面这个例中一样,将 love 的值设置为 false,就不会发生错误了:

let love = false;

let life = (love && car); // 这里不会发生错误

alert(life); //会执行("false")

在这个例子中,警告框会显示出来。无论变量 car 有没有定义,也永远不 会对它求值,因为第一个操作数的值是 false。而这也就意味着逻辑与操作的结果必定是 false,根本用不着再对&&右侧的操作数求值了。在使用逻辑与操作符时要始终铭记它是一个短路操作符