title | layout | categories | tags | excerpt |
---|---|---|---|---|
JavaScript邏輯運算符“&&”和“||”短路原則的應用 |
post |
JavaScript |
javascript邏輯運算 短路原則 |
javas中邏輯運算符的介紹,短路原則的介紹與應用 |
邏輯運算符
在Javascript中,有邏輯運算符 與 &&
, 或 ||
, 非 !
,常在條件句或循環中進行邏輯判斷。
例如:
var a = 1, b = 1, c = 2;
if (a = b && (b = c || a != c))
{
alert("true");
} else
{
alert("false");
}
括號中表達式值爲真,最後提示“true”。
短路原則
在邏輯運算中,這是一個通用的原則,這是由於表達式從左到右執行的特性,爲了減少運算量而給運算器規定的操作。主要針對 &&
和 ||
兩種運算。
-
&&
的判斷是同真爲真,一假爲假,則運算如果左邊的表達式值爲false
,那麼就不會再執行右邊的表達式了,如果左表達式爲true
,就會繼續執行右表達式; -
||
的判斷是一真爲真,同假爲假,則運算如果坐表達式值爲true
,那麼就不用執行右邊的表達式了,如果左表達式爲false
,就會繼續執行右表達式;
舉例說明:
(1 == 1) && alert("msg1");
(1 != 1) && alert("msg2");
(1 == 1) || alert("msg3");
(1 != 1) || alert("msg4");
結果是提示**“msg1”和“msg4”**。原理如上述。
因此,如果有以下表達式:
var a = 9;
if (a > 0)
{
alert("true");
} else
{
alert("false");
}
也許你會使用三目運算簡化成這樣:
var a = 9;
(a > 0) ? alert("true") : alert("false");
其實也可以這樣寫:
var a = 9;
(a > 0) && alert("true");
(a > 0) || alert("false");
Javascript中的應用
在javascript中,只有對象(Object)
和布爾值true
爲真,其它例如 undefined
, NaN
, false
等,值爲 false
。爲被定義的對象或未賦值變量也是 false
,因爲其值都是 undefined
,這裏就可以應用於檢查某變量是否已定義。
舉例說明:
var a = 1;
var o = new Object();
var b;
a && alert("defined"); //已定義a,提示“defined”
o && alert("defined"); //已定義對象o,提示“defined”
Object && alert("defined"); //Object是一個已知的全局對象,提示“defined”
b || alert("not defined"); //b未賦值,提示“not defined”
p || alert("not defined"); //未定義p,提示“not defined”
除了這個也能衍生出其它相同原理的應用,類似於判斷賦值 var a = (b > 0) && '9'
或判斷定義變量 var abc = abc || ""
等。
js中使用這種方法可以減少代碼量,提示性能,但同時也降低了代碼可讀性,比如個人覺得還是看以下代碼比較舒適:
var a = 1;
if (a > 1)
{
alert("true");
}
方法的選擇就要視情況而權衡了。