一、基本原則
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.運算式中有()運算子,請參照法則。