欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

或操作(||)和与操作(&&)的执行顺序以及返回结果

程序员文章站 2024-02-29 08:16:16
...

js中|| 和&&的执行结果默认是0为false。 a && b ,如果 a 为true,直接返回b,而不管b为true或者false,否则返回a; a || b ,如果 a 为false,直接返回b,而不管b为true或者false,否则返回 a。

var result = true && false;

(一)逻辑与的真值表(有假即假)

第一个操作数 第二个操作数 结果
true true true
true false false
false true false
false false false

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

1.如果第一个操作数是对象,则返回第二个操作数; 
2.如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该对象; 
3.如果两个操作数都是对象,则返回第二个操作数; 
4.如果有一个操作数是 null,则返回 null; 
5.如果有一个操作数是 NaN,则返回 undefined; 
6.如果有一个操作数是 undefined, 则返回 undefined。

(三)&& 属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。对于 && 而言,如果第一个操作数是 false ,则无论第二个操作数是什么值,结果都不能再可能是 true 了。

错误示例代码:

var found =true;
var result = (found && someUndefinedVariable);     //这里会发生错误
alert(result);    //这一行不会执行
  • 1
  • 2
  • 3
  • 4

代码解释: 
1.当执行逻辑与操作时会发生错误,因为变量 someUndefinedVariable 没有声明; 
2.由于变量 found 的值是 true,所以逻辑与操作符会继续对变量someUndefinedVariable 求值,但其尚未定义,因此就会导致错误。

结论:不能在逻辑与操作中使用未定义的值。

正确示例代码:

var found = false;
var result = ( found && someUndefinedVariable );    //不会发生错误
alert(result);    //会执行(“false”)
  • 1
  • 2
  • 3
  • 4

代码解释: 
1.在这个示例里,警告框会显示出来; 
2.无论变量 someUndefindVariable 有没有定义,也永远不能对它求值,因为第一个操作数的值是 false,所以逻辑与操作的结果必定是 false,根本用不着再对 &&右侧的操作数求值了。

逻辑或

var result = true || false;
  • 1
  • 2

(一)逻辑或的真值表(有真即真)

第一个操作数 第二个操作数 结果
true true true
true false true
false true true
false false false

(二)与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值;此时,它遵循下列规则:

1.如果第一个操作数是对象,则返回第一个操作数; 
2.第一个操作数的求值结果为 false,则返回第二个操作数; 
3.如果两个操作数都是对象,则返回第一个操作数; 
4.如果两个操作数都是 null,则返回 null; 
5.如果两个操作数都是 NaN ,则返回 NaN; 
6.如果两个操作数都是 undefined,则返回 undefined。

(三)逻辑或操作符也是短路操作符;如果第一个操作数的求值结果为 true ,就不会对第二个操作数求值了。

正确代码示例:

var found =true;
var result = (found || someUndefinedVariable);     //不会发生错误
alert(result);    //会执行(“true”) 
  • 1
  • 2
  • 3
  • 4

代码解释: 
1.在这个示例里,警告框会显示出来; 
2.由于变量 found 的值是 true,而变量 someUndefinedVariable 永远不会求值,因此结果就会输出“true”; 
3.如果把 found 的值改为 false,就会导致错误。

(四)我们可以利用逻辑或的这一行为来避免为变量赋值 null 或 undefined 值

var myObject = preferredObject || backupObject;
  • 1
  • 2

代码解释: 
1.在这个例子中,变量 myObject 将被赋予等号后面两个值中的一个。变量 preferredObject 中包含有先赋给变量 myObject 的值,变量 backupObject 负责在 preferredObject 中不包含有效值的情况下提供后备值。如果 preferredObject 的值不是 null,那么它的值将被赋予给 myObject;如果是 null,则将 backupObject 的值赋给 myObject。

转载   https://blog.csdn.net/u014490083/article/details/78718330