有這麼一種常見的語句:數組
var
a = a || 4;
插件
那賦值語句中的「&&」操做符和"||"操做符是什麼意思?如何知道這兩個邏輯操做符兩旁的數據哪一個會被賦值到等號左邊的變量裏面?其實,會被賦值到等號左邊的變量裏面的必定是起決定性因素的那個變量。其實這就是if...else的變種,要麼a=a,要麼a=4。雖然沒那麼直接,不過也省了很多代碼。code
什麼是起決定性因素的變量?ip
咱們知道,兩個bool型變量a和b進行與操做,只有a和b的值都爲true時,返回結果才爲true,只要有一個變量值爲false,返回結果就爲false。看下這個語句:字符串
c = a && b
變量
因此,把上面這個語句的Boolean()方法去掉,把a和b換成任意類型的變量,結果就很明顯了。假設a爲true,那麼此時還沒法決定c爲true仍是false,要看b的值才能決定,因此此時b是決定性因素;假設a爲false,那麼此時已經能夠肯定c爲false,不用考慮b的值了,因此此時a是決定性因素。原理
或操做的原理和與操做相似,這裏再也不說明。遍歷
如今看下文章開頭提到的那個語句,意思就是說若是a已經賦值(假設a是不爲0的數),那麼a的值不變,不然a=4。再往細了說,就是若是a已經賦值,那麼Boolean(a)=true,或操做符右邊的數就不看了,等式左邊的a就等於右邊的a;若是a沒有複製,因爲a已經聲明,那麼等式右邊的a=undefined,Boolean(a)= false,這時看操做符右邊,無論操做符右邊的Bool值爲何,如今等式左邊的a就等於這個數了。方法
須要注意的是, 若是一個變量爲聲明,打印這個變量時,系統會報錯;若是聲明瞭一個變量但沒有複製,打印這個變量時,系統會打印出‘undefined’這個字符串。所以,在與/或操做中,若是起決定性因素的那個變量沒有聲明,那麼系統是會報錯的。數據
實際應用中,或操做符會更經常使用些。通常用於插件替換原始值(參見Swiper.js),或者是DOM操做,例如:
var
length = length || $list.length
若是這個語句會執行屢次,那麼從第二次開始,每次執行這個語句時,就不會再去遍歷這個數組的長度了,由於長度已經存在length變量裏面了。