【java&js】&&與||混用執行順序,讓你不再犯暈!

java

&&與||的執行優先級是一樣的,不論有多少的混用都是從左到右執行

&&短路與,第一個爲false,整體爲false

||短路或,第一個爲true,整體爲true

public class Demo27 {
    public static void main(String[] args) {
        if (Demo27.aImFalseNo1() || Demo27.aImTrueNo1() && Demo27.aImTrueNo2() || Demo27.aImFalseNo2()){
            System.out.println("main");
        }
    }
    public static boolean aImFalseNo1(){
        System.out.println("aImFalseNo1");
        return false;
    }
    public static boolean aImFalseNo2(){
        System.out.println("aImFalseNo2");
        return false;
    }
    public static boolean aImTrueNo1(){
        System.out.println("aImTrueNo1");
        return true;
    }
    public static boolean aImTrueNo2(){
        System.out.println("aImTrueNo2");
        return true;
    }

}

上面的demo程序,依次執行步驟詳解

第一次判斷:

Demo27.aImFalseNo1() 通過 || 與後面的 Demo27.aImTrueNo1() 鏈接

如果Demo27.aImFalseNo1()爲true,所有後面的都不同判斷,直接進入if語句

如果Demo27.aImFalseNo1()爲false,則繼續判斷

第二次判斷:

Demo27.aImTrueNo1() 通過 &&與後面的 Demo27.aImTrueNo2()鏈接

分兩種情況

第一種情況

如果Demo27.aImFalseNo1()爲false,後面的Demo27.aImTrueNo2()無需判斷,

           因爲Demo27.aImTrueNo2() 通過|| 與Demo27.aImFalseNo2()鏈接,直接判斷Demo27.aImFalseNo2(),如果

           Demo27.aImFalseNo2()爲true進入if語句,如果爲false,那麼整體的條件爲false

第二種情況

如果Demo27.aImFalseNo1()爲true,後面的Demo27.aImTrueNo2()需要繼續判斷,

如果Demo27.aImTrueNo2()爲true,則進入if語句,

如果Demo27.aImTrueNo2()爲false繼續判斷,

           因爲Demo27.aImTrueNo2() 通過|| 與Demo27.aImFalseNo2()鏈接,直接判斷Demo27.aImFalseNo2(),如果

           Demo27.aImFalseNo2()爲true進入if語句,如果爲false,那麼整體的條件爲false

end

因此上面的demo應該執行的是

Demo27.aImFalseNo1() 、Demo27.aImTrueNo1() 、Demo27.aImTrueNo2(),這三個方法,並會進入main方法

執行結果如下

備註:目前測試沒有發現加上小括號有什麼影響,應該是因爲都是短路的原因。


js

作爲if的判斷條件和java一樣,但是在js中有更多的用法

如下

const a = "a";
const b = "b";
const c = a || b;
const d = a && b;
console.log(c); //a
console.log(d); //b

執行結果解釋

1、const c = a || b; 

     當a有值,直接將a賦值給c,如果a沒有值,查看b,如果b有值,將b的值賦值給c

2、const d = a && b;

     當a有值,將b的值賦值給d,當a沒有值,爲空,則將空賦值給b;

3、js的if條件中,必須要有值才爲true,如果沒有定義、或者沒有賦值、或者值爲空,都爲false

4、

//var obj = {userInfo:{person:{name:"zhangsan"}}};
 
var o = window.obj&&obj.userInfo&&obj.userInfo.person&&obj.userInfo.person.name;
if(o){
console.log(o);
}

上面的代碼,即使obj被註釋了也不會報錯,因爲時候通過window.obj來判斷的,所有的變量都是window的屬性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章