&&的優先級比||的優先級高ui
tip1:邏輯與操做能夠應用於任何類型的操做數,在有一個操做數不是布爾值時,不必定返回Boolean值,大概的規則以下:code
一、第一個操做數是對象,則返回第二個操做數;對象
二、第二個操做數爲對象時,則只有在第一個操做數的求值結果爲true時才返回該對象ip
三、若是兩個操做數都是對象,則返回第二個操做數;console
四、第一個操做數爲null時,則返回null;co
五、第一個操做數爲NaN時,則返回NaN;undefined
六、第一個操做數爲undefined時,則返回undefined;
tip:若是第一個操做數求值結果爲false,後面的操做數都不會去判斷執行,無論第二個操做數爲何值,最終結果都不會是true
tip:返回第二個操做數(大多數狀況下)
見代碼,大概舉一個例子驗證下:
var obj={ "name":"zhan", "age":25 } var obj1={ "name":"hui", "age":25 } var boolean_0=false; var boolean_1=true; var null_=null; var isNan=NaN; var str='zhan' var undefined_=undefined; var num_0=0; var num_1=1; console.log(obj&&boolean_1)//true console.log(obj&&boolean_0)//false console.log(obj&&null_)//null console.log(obj&&isNan)//NaN console.log(obj&&str)//'zhan' console.log(obj&&undefined_)//undefined console.log(obj&&obj1)//obj1 console.log(obj&&num_0)//0 console.log(obj&&num_1)//1 console.log(null_&&num_1)//null console.log(isNan&&num_1)//NaN console.log(undefined_&&num_1)//undefined
tip:返回第一個操做數(大多數狀況下) 一、第一個操做數爲對象,則返回第一個操做數;
二、第一個操做數的求值結果爲false,則返回第二個操做數;
三、兩個都是對象,則返回第一個操做數;
四、兩個操做數都是null,則返回null;
五、兩個操做數都是NaN,則返回NaN;
六、兩個操做數都是undefined,則返回undefined;
見例子:
console.log(obj||boolean_1)//obj console.log(obj||boolean_0)//obj console.log(obj||null_)//obj console.log(obj||isNan)//obj console.log(obj||str)//obj console.log(obj||undefined_)//obj console.log(obj||obj1)//obj console.log(obj||num_0)//obj console.log(obj||num_1)//obj console.log(null_||null_)//null console.log(isNan||isNan)//NaN console.log(undefined_||undefined_)//undefined