JavaScript逻辑与运算符(&&)的行为与短路机制详解

作者:异步漫步

时间:2026-10-29

浏览:80

本文详细解析JavaScript中逻辑与运算符(&&)的运算规则。除了返回布尔值外,当操作数非布尔类型时,运算符将返回具体的对象、null、NaN或undefined。重点介绍了短路运算机制:若第一个操作数决定结果,则不再计算第二个操作数,这能有效避免对未定义变量的访问错误。

文章目录

JavaScript逻辑与运算符基础

在JavaScript语言中,逻辑与(Logical AND)运算符通过双和号(&&)来标识。


var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

逻辑与运算符的具体行为可以通过以下真值表进行描述:

JavaScript逻辑与运算符基础

需要注意的是,逻辑与运算符的操作数可以是任意数据类型,而不仅仅是布尔值。因此,当操作数并非原始的布尔类型时,该运算符不一定返回布尔类型的结果。

逻辑与运算符的运算规则

逻辑与运算符的具体运算行为如下所示:

  • 若其中一个操作数是对象,而另一个是布尔值,则运算符返回该对象。
  • 若两个操作数均为对象,则返回第二个对象。
  • 若其中一个操作数是 null,则返回 null。
  • 若其中一个操作数是 NaN,则返回 NaN。
  • 若其中一个操作数是 undefined,则程序会抛出错误。
  • 若两个操作数均为布尔类型,则返回布尔值。

短路运算机制与示例

与Java中的逻辑与运算类似,JavaScript中的逻辑与运算也具备短路特性,即如果第一个操作数已经决定了最终结果,系统将不再计算第二个操作数。对于逻辑与运算而言,如果第一个操作数为 false,那么无论第二个操作数的值如何,最终结果都不可能为 true。 以下是一个示例代码:


var bTrue = true;
var bResult = (bTrue && bUnknown); //发生错误
alert(bResult); //这一行不会执行

上述代码的运行结果如下:

JavaScript逻辑与运算符基础

在该段代码执行逻辑与运算时,会引发错误,因为变量 bUnknown 处于未定义状态。由于变量 bTrue 的值为 true,逻辑与运算会继续计算变量 bUnknown。然而,因为 bUnknown 的值为 undefined,无法参与逻辑与运算,从而导致错误。 如果修改示例,将第一个操作数设置为 false,则不会发生错误:


var bTrue = false;
var bResult = (bTrue && bUnknown); //不会发生错误
alert("bTrue && bUnknown的结果是:"+(bResult));//输出 "false"

在这段代码中,脚本将输出逻辑与运算返回的值,即字符串 "false"。即使变量 bUnknown 的值为 undefined,它也不会被计算,因为第一个操作数的值已经是 false。

运行结果如下:

JavaScript逻辑与运算符基础

运算行为验证测试

验证JavaScript逻辑与运算符的运算行为

测试代码如下:


<script type="text/javascript">
  document.write("验证JavaScript逻辑And运算符的运算行为:");
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");

  var bTrue = true;
  var bFalse = false;
  var bResult = bTrue && bFalse;
  /*1.如果两个运算数都是boolean类型,则返回boolean值*/
  document.write("1.如果两个运算数都是boolean类型,则返回boolean值");
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  document.write("bTrue = true,bFalse = false,bTrue && bFalse的结果是:"+(bResult));//结果为false
  document.write("<br/>");

  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");

  var obj = new Object();
  /*2.如果一个运算数是对象,另一个是 Boolean 值,返回该对象*/
  document.write("2.如果一个运算数是对象,另一个是 Boolean 值,返回该对象");
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  document.write("obj是一个对象,true&&obj的结果是:"+(true&&obj));
  document.write("<br/>");
  document.write("obj==true&&obj的结果是:"+(obj==(true&&obj)));
  document.write("<br/>");
  document.write("false&&obj的结果是:"+(false&&obj));
  document.write("<br/>");

  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  /*3.如果两个运算数都是对象,返回第二个对象。*/
  var obj1 = new Object();
  var obj2 = new Object();
  document.write("3.如果两个运算数都是对象,返回第二个对象。");
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  document.write("obj1是一个对象,obj2是一个对象,obj1==(obj1&&obj2)的结果是:"+(obj1==(obj1&&obj2)));//结果为false
  document.write("<br/>");
  document.write("obj1是一个对象,obj2是一个对象,obj2==(obj1&&obj2)的结果是:"+(obj2==(obj1&&obj2)));//结果为true
  document.write("<br/>");

  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  /*4.如果某个运算数是 null,返回null。*/
  var a=null;
  var b=true;
  document.write("4.如果某个运算数是 null,返回null。");
  document.write("<br/>");
  document.write("a=null,b=true,a&&b的结果是:"+(a&&b));
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  /*5.如果某个运算数是NaN,返回NaN*/
   var c = NaN;
   var d = "str";
  document.write("5.如果某个运算数是NaN,返回NaN");
  document.write("<br/>");
  document.write("c=NaN,d=str,c&&d的结果是:"+(c&&d));
  document.write("<br/>");
  document.write("-----------------------------------------------------------------------------");
  document.write("<br/>");
  /*
  6.JavaScript中的逻辑 AND 运算是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数。
  对于逻辑 AND 运算来说,如果第一个运算数是 false,那么无论第二个运算数的值是什么,结果都不可能等于 true。
  */
  var bFalse = false;
  var bResult = (bFalse && bUnknown);
  document.write("6.JavaScript中的逻辑 AND 运算是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数");
  document.write("<br/>");
  document.write("对于逻辑 AND 运算来说,如果第一个运算数是 false,那么无论第二个运算数的值是什么,结果都不可能等于 true。");
  document.write("<br/>");
  document.write("bFalse=false,bUnknown是一个未定义的变量,bFalse && bUnknown的结果是:"+(bResult)); //输出 "false"

  var bTrue = true;
  var bResult = (bTrue && bUnknown);  //发生错误
  alert(bResult);      //这一行不会执行
 </script>

JavaScript逻辑与运算符基础

以上内容即为对JavaScript逻辑与运算符的完整介绍,希望能帮助读者更好地理解JavaScript中的逻辑运算符。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章