一、基本原则
1.按照运算符号优先级,先()再与再或。
2.与运算:要求每个表达式都返回真才为真。
3.或运算:要求有一个表达式为真就返回真。
二、按照基本原则进行逻辑运算
1.与运算:要求每个表达式都返回真才为真,所以将计算表达式直至第一个非真表达式。所以将返回第一个非真表达式的值。
2.与运算:按上述法则,假设表达式最终为非假,即没有一个非真表达式,根据第一法则,将返回最后一个表达式的值。
3.或运算:要求只要一个表达式返回真就为真,所以将计算表达式直至第一个非假表达式。所以将返回第一个非假表达式的值。
4.或运算:按第三法则,假设表达式最终为非真,即没有一个非假表达式,根据第三法则,将返回最后一个表达式的值。
5.混合运算:按照优先级分开计算。
三、测试
变量:
var a=1,b={},c=null,d=false;
其中a和b为非假表达式,c和d为非真表达式
1.表达式a && b && c && d将返回第一个非真表达式的值,即c为null。
2.表达式a && b && d && c将返回第一个非真表达式的值,即d为false。
1.表达式a && b将返回最后一个表达式的值,即b为[object object]。
2.表达式b && a将返回a为1。
1.表达式c || d将返回最后一个表达式的值,即d为false;
2.表达式d || c将返回c为null。
1.表达式a || b || c || d将返回第一个非假表达式的值,即a为1。
2.表达式b || a || c || d将返回第一个非假表达式的值,即b为[object object]。
1.表达式a && b || c && d
分解,先与运算再或运算 a && b值为b,c && d值为c。
得到 b || c,所以最终结果为第一个非假表达式b=[object object]。
2.表达式a && c || b && d
同上,得到 c || d,最终结果为d=false。
3.表达式c && a || b && d
同上,得到 c || d,最终结果为d=false。
4.表达式a || b && c || d
根据或运算的基本原则,最终得到结果a=1。
计算顺序:
1.b && c得到c=null。
2.a || null ||……因为a=1为真,将直接返回a。
注:其实这个计算顺序有待考证,第一步应该是计算了。
5.表达式c || a && b || d
计算顺序:
1.a && b得到b=[object object]。
2.c || {} || d,计算到第一个非假值,返回[object object]。
注:第一步是一定计算了。
6.表达式
……
……
综述:最终都归结到了原则与法则。
1.如果表达式中最外层有||运算,直接找第一个非假表达式,其值为最终返回值。
2.如果表达式中最外层有&&运算,直接找第一个非真表达式,其值为最终返回值。
3.如果表达式中最外层有||运算且不存在非假表达式,其值为最后一个非假表达式的值。
4.如果表达式中最外层有&&运算且不存在非真表达式,其值为最后一个非真表达式的值。
5.表达式中有()运算符,请参照法则。