問題帶入
問題1:
console.log(true && false) //?
console.log("1" && 2) // ?
console.log("" && 2) //?
console.log(" " && 2) //?
console.log(0 && "2") // ?
console.log(a=5 && a+=5) // ?
&&(邏輯與)和||(邏輯或)這兩個操作符應該是很多人都知道且運用於專案當中。最簡單的理解莫過於電路當中的串聯與併聯。
邏輯與(&&): 當兩邊式子都成立的時候結果返回右邊成立的那個。(兩者 都為真(true)返回右邊真),如果其中乙個為false(假),則返回false。
上面列印出來的結果:
console.log(true && false) //false
console.log("1" && 2) // 2
console.log("" && 2) //
console.log(" " && 2) //2
console.log(0 && "2") // 0
console.log(a=5 && a+=5) // invalid left-hand side in assignment
true&&false這不用說了;字串」1」 為true 所以第二個列印出2;
第三和第四的字串中有乙個空格的差別,沒有空格的是乙個空字串,空字串經過valueof等過程的解析會為false,所以列印出空,而第四個中間有空格,那個空格也可以算作乙個字元所以為true, 返回2;
最後乙個報錯,這個錯誤一看就應該明了,賦值錯誤,為什麼會賦值錯誤呢?仔細想想,原來與操作符的優先順序有關,此句等效於 console.log((a=5 && a)+=5); 此時a沒有定義也沒有初始化,所以會報錯。只需加上小括號提高+=的優先順序就好了,console.log((a=5) &&(a+=5)) //10
問題2:
console.log(true || false) //?
console.log("1" || 2) //?
console.log("" || 2) //
console.log(" " || 2) //?
console.log(0 || "2") // ?
console.log(a=5 || a+=5) // ?
不用想都知道,是與上面相反。
邏輯或(||): 當兩邊式子都成立的時候結果返回左邊成立的那個。(兩者 都為真(true)返回左邊真,因為一旦左邊為true就不會執行右邊的運算,兩者都為false時返回右邊false),如果其中乙個為false(假)乙個為true,則返回true。只有兩者都為false時才會返回false。
列印結果:
console.log(true || false) //true
console.log("1" || 2) // "1"
console.log("" || 2) // 2
console.log(" " || 2) // " "
console.log(0 || "2") // "2"
console.log(a=5 || a+=5) // 報錯,同上
最後乙個只需將+=的優先順序提高,console.log(a=5 || (a+=5)),而前面的&&需要兩邊都加小括號console.log((a=5) && (a+=5)):
先轉化為:
console.log(a=(5 || (a+=5)));
console.log(a=(5 && (a+=5)));
因為一般程式執行順序是從左至有, || 如果發現左邊為true 則不會再執行右邊內容,而&& 如果左邊為true還要執行右邊內容再返回,而右邊a沒有初始化所以報錯。
常用設定 物件為null或者undefined時候的預設值
console.log(null || 0) //0
console.log(null || '') //
console.log(undefined || 1) //1
console.log(undefined || 0) //0
操作符的優先順序
associativity and operator 操作符及其結合性 function 功能 use用法 l global scope 全域性作用域 name l class scope 類作用域 class name l namespace scope 名字空間作用域 namespace nam...
操作符優先順序
操作符優先順序 優先順序運算子 名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數...
操作符優先順序
優先順序 運算子含 義 要求運算 物件的個數 結合方向1 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子 自左至右2 邏輯非運算子 1 單目運算子 自右至左 按位取反運算子 自增運算子 自減運算子 負號運算子 型別 型別轉換運算子 指標運算子 位址與運算子 sizeof 長度運算子 3 ...