首页 > js的逻辑运算问题

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

Phpq中也一样,短路现象


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


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


其实嘛,这个东西是从 shell 语言过来的,但是这种代码写出来不直观,也不好读。可以看看这篇文章有介绍。

http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy/


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

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

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

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

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

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

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

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


这个很简单,,你不需要理解,,记住就好了。

true||* == true,第一个为true就不在看第二个了,值为true。
fasle || true == true 第一个为false继续看第二个,第二个为true就为true
false || false == false 第一个为false继续看第二个,第二个为false就为false

false &&* == false ,第一个为false就不在看第二个了,值为false。
true && false == false 第一个为true 继续看第二个,第二个为false 就为false
true && true == true 第一个为true 继续看第二个,第二个为true 就为true

当进行逻辑运算的不是布尔值,而是数字的时候,就等于相应的数字,当然先进性布尔判断,字符串也一样。

(1&&2&&5) || 3的值就为5,因为1为true继续判断第二个2也为true继续判断第三个5也为true,则前面为true不用判断3了,所以值为5

1&&2||3&&4|| 3这个就为2

0||''||'a'这个就为'a'因为前两个的布尔值都为false所以继续判断第三个。就为'a'。

你的题目在下面

false||6||true首先false继续判断第二个,则(false||6)这个的值为6.为真则不判断最后一个值了,就为6

false&&6
因为第一个已经false就不会看第二个6了,就为false

【热门文章】
【热门文章】