日期:2014-05-16  浏览次数:20364 次

js 关于逻辑元算符 比较有意思的个例子
true||true&&false,返回设么结果。
问(1)执行的顺序是什么,先执行什么,在执行什么。
  (2)逻辑运算符|| 和 &&有没有先后顺序?
  (3)表达式是从左到右计算,还是从右至左计算


------解决方案--------------------
.(点运算),[],new,()
!, ~, ++, --
*, /, %
+, -
<<, >>
<, <=, >, >=
==, !=, ===, !==
&
^
|
&&
|| 
? :
=、+=、-=、*=、/= 、%=、 <<=、 >>=、 >>>= 、&= 、^= 、|=
由上而下,优先级依次降低。
同级运算符下由左而右运算。
BTW,大部分编程语言的运算符基本都是这样。
------解决方案--------------------
探讨
true||true&amp;&amp;false,返回设么结果。
问(1)执行的顺序是什么,先执行什么,在执行什么。
(2)逻辑运算符|| 和 &amp;&amp;有没有先后顺序?
(3)表达式是从左到右计算,还是从右至左计算

------解决方案--------------------
昨天在另外一个群提了这个问题,问题也得到了解答。
问题核心:
(1) 逻辑运算符的优先级。&&的优先级比||高(但我还没看到哪本权威书直接讲这个,不过测试的确是这样的。
(2) ||和&&的判断逻辑。||判断了左边的表达式为true后,不会执行其他的代码,由于||是最后计算,当他判断左边表达式为真后,不会执行其余代码,所以表达式后半部分true&&false不会执行。
(3) 逻辑运算符返回值问题。是返回true还是1,这个跟js的处理方式有关,1可以转换为true,但当逻辑判断后返回左边的表达式,而不是true。

作者意见:这个问题看似基础,甚至被解决的人鄙视,但是在这里还是谈谈个人的观点。
||和&&优先级是容易出错的问题,建议在使用一门语言时候做个测试,例如T—SQL的处理逻辑方式是什么。一个确保不会出错的方法是加括号。
多重逻辑的运用:
(1) 设置默认值。
EG:
Function(a,b)
{
Var testA =a||”测试A”;
Var testB = b||”测试B”;
}
(2) 简化语句
EG:
Retrun /\s?/.test(“您的输入”)&&|| /\d?/.test(“您的输入”)alert(“输入不能为空并且为数字”)||false