js的逻辑运算问题

今天学ps看到一句话:js中,逻辑运算返回的是最早能判断表达式结果的那个值。想了半天,脑子没转过来,求教。

例子:

var a=false;
var b=6;
var c=true;
console.log(a‖b‖c);//6
var d=false;
var e=6;
console.log(d && e);//false
阅读 5.7k
5 个回答

题主,我给你讲两个故事:

考试前,小红妈妈对小红说:“小红啊,这次考试你只要有一门超过90分,我就带你去迪斯尼玩”。小红很高兴。考试后,小红掏出试卷递给妈妈。妈妈看第一份:语文85;妈妈看第二份:数学92。妈妈高兴地说:“剩下的不用看了,我明天就带你去迪斯尼!”

考试前,小明妈妈对小明说:“小明啊,这次考试你只要有一门低于60分,我就打断你的狗腿”。小明很害怕。考试后,小明掏出试卷递给妈妈。妈妈看第一份:语文62;妈妈看第二份:数学55。妈妈愤怒地说:“剩下的不用看了,我现在就打断你的狗腿!”

正如这个故事讲的:计算一个复杂表达式的时候,如果在计算到某个步骤时就可以确定最终值,那么就没有必要再往下计算了。据我所知,很多语言在计算逻辑表达式的时候都是这么做的。毕竟逻辑表达式只有两种结果:true和false,所以结果很容易提前预知。

只不过JavaScript比较特殊,:逻辑表达式最终的结果不一定是true或false,而是停止计算前最后一个操作数的值。

提示你一点:并不存在多个操作数的逻辑运算,只存在两个数的逻辑运算。

例如:a && b && c只不过等价于(a && b) && c

具体规则,见:http://es5.github.io/#x11.11

我们知道(真||任意)都是真
那么在(表达式1 || 表达式2)这整个表达式中, 如果表达式1是真, 此时已经"可以判断整个表达式的结果", 这个结果就是表达式1. 此过程中表达式2根本不会被计算 (注意: 表达式2不一定是一个变量, 可以是个很长的式子, 可以是个函数call)

Phpq中也一样,短路现象

楼上回答已经非常好啦,其实&&运算返回真的条件是所有为真,所以有一个为假啦,就直接返回假啦。而‖运算,返回为真的条件是有一个为真,所以会从头开始往后执行,如果遇到一个真就停止往后执行啦,直接返回真,而如果到最后还是假,那就是假。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题