js中的||、&&與!用法


&&和||在JQuery源代碼內尤為使用廣泛,由網上找了些例子作為參考,對其用法研究了一下:

1. &&
function a(){
alert("a");
return true;
}
function b(){
alert("b");
return true;
}
var c=a()&&b();
alert(c);
  a() && b() :如果執行a()后返回true,則執行b()並返回b的值;如果執行a()后返回false,則整個表達式返回a()的值,b()不執行;

2. ||

function a(){
alert("a");
return true;
}
function b(){
alert("b");
return false;
}
var c=a()||b();
alert(c);
  a() || b() :如果執行a()后返回true,則整個表達式返回a()的值,b()不執行;如果執行a()后返回false,則執行b()並返回b()的值;

3. !

js中!的用法是比較靈活的,它除了做邏輯運算常常會用!做類型判斷,可以用!與上對象來求得一個布爾值,

( 1、)!可將變量轉換成boolean類型,null、undefined和空字符串取反都為false,其余都為true。
!null=true

    !undefined=true

    !''=true

    !100=false

    !'abc'=false   

(2、)!!常常用來做類型判斷,在第一步!(變量)之后再做邏輯取反運算,在js中新手常常會寫這樣臃腫的代碼:
判斷變量a為非空,未定義或者非空串才能執行方法體的內容
var a;
if(a!=null&&typeof(a)!=undefined&&a!=''){
//a有內容才執行的代碼
}
實際上我們只需要寫一個判斷表達:
if(!!a){
//a有內容才執行的代碼...
}
  
就能和上面達到同樣的效果。a是有實際含義的變量才執行方法,否則變量null,undefined和''空串都不會執行以下代碼。

可以總結出來,“!”是邏輯與運算,並且可以與任何變量進行邏輯與將其轉化為布爾值,“!!”則是邏輯與的取反運算,尤其后者在判斷類型時代碼簡潔高效,省去了多次判斷null、undefined和空字符串的冗余代碼。

    注:&& 優先級高於 ||,邏輯運算符里!的優先級最高

  alert((1 && 3 || 0) && 4); //結果4 ①
  alert(1 && 3 || 0 && 4); //結果3 ②
  alert(0 && 3 || 1 && 4); //結果4 ③

  分析:
  語句①:1&&3 返回3 => 3 || 0 返回 3 => 3&&4 返回 4
  語句②:先執行1&&3 返回3,在執行0&&4返回0,最后執行結果比較 3||0 返回 3
  語句③:先執行0&&3 返回0,在執行1&&4返回4,最后執行結果比較 0||4 返回 4

  注:非0的整數都為true,undefined、null和空字符串”" 為false。
&&和||返回的是兩個操作數的其中一個。
&&,左操作數為假值時,返回左操作數,否則返回右操作數。||,左操作數為假值時,返回右操作數,否則返回左操作數。
假值有空字符串"",數值0和-0,NaN,false,null和undefined。
仔細想想,&&如果左邊為真值,結果就取決右邊的操作數。而||如果左為假,則結果取決於右。所以我覺得,js這樣做,無傷大雅,並且提供了更好的靈活性。
&&和||還有一個"短路"原則:當左邊的結果能決定整個&&/||的結果時,不會執行右邊的計算。比如 20 && (i++)+2 這個表達式,先計算&&左邊的20得到一個假值0,這個時候無論右邊是真是假都不會影響結果(為假,對於js來說就是返回左邊的值),所以就不會去執行右邊的運算,也就是說右邊的(i++)+1根本就不會得到執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM