Boolean 運算符得以讓程序語言得以正常運行,因此它起到十分重要的作用。
Boolean 運算符有三種:NOT、AND 和 OR。
在學習各種邏輯運算符之前,讓我們先了解一下ECMAScript-262 v5規(guī)范中描述的ToBoolean操作。
抽象操作ToBoolean將其參數(shù)按照下表中的規(guī)則轉換為邏輯值:
參數(shù)類型 | 結果 |
---|---|
Undefined | false |
Null | false |
Boolean | 結果等于輸入的參數(shù)(不轉換) |
Number | 如果參數(shù)為 +0, -0 或 NaN,則結果為 false;否則為 true。 |
String | 如果參數(shù)為空字符串,則結果為 false;否則為 true。 |
Object | true |
在ECMAScript中,邏輯NOT運算符與C和Java中的邏輯NOT運算符相同,都由感嘆號(!)表示。
與邏輯OR和邏輯AND運算符不同的是,邏輯NOT運算符返回的一定是Boolean值。
邏輯NOT運算符的行為如下:
通常,該運算符用于控制循環(huán):
var bFound = false;
var i = 0;
while (!bFound)
{
if (aValue[i] == vSearchValues) {
bFound = true;
} else {
i++;
}
}
在這個例子中,Boolean變量(bFound)用于記錄檢索是否成功。找到問題中的數(shù)據(jù)項時,bFound將被設置為true,!bFound將等于false,意味著運行將跳出while 循環(huán)。
判斷ECMAScript變量的Boolean值時,也可以使用邏輯NOT運算符。這樣做需要在一行代碼中使用兩個NOT運算符。無論運算數(shù)是什么類型,第一個NOT運算符返回Boolean值。第二個NOT將對該Boolean值求負,從而給出變量真正的Boolean值。
var bFalse = false;
var sRed = "red";
var iZero = 0;
var iThreeFourFive = 345;
var oObject = new Object;
document.write("bFalse 的邏輯值是 " + (!!bFalse));
document.write("sRed 的邏輯值是 " + (!!sRed));
document.write("iZero 的邏輯值是 " + (!!iZero));
document.write("iThreeFourFive 的邏輯值是 " + (!!iThreeFourFive));
document.write("oObject 的邏輯值是 " + (!!oObject));
結果:
bFalse 的邏輯值是 false
sRed 的邏輯值是 true
iZero 的邏輯值是 false
iThreeFourFive 的邏輯值是 true
oObject 的邏輯值是 true
在ECMAScript中,邏輯AND運算符用雙和號(&&)表示:
例如:
var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;
下面的真值表描述了邏輯AND運算符的行為:
運算數(shù) 1 | 運算數(shù) 2 | 結果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
邏輯 AND 運算的運算數(shù)可以是任何類型的,不止是 Boolean 值。
如果某個運算數(shù)不是原始的Boolean型值,邏輯AND運算并不一定返回Boolean值:
與Java中的邏輯AND運算相似,ECMAScript中的邏輯AND運算也是簡便運算,即如果第一個運算數(shù)決定了結果,就不再計算第二個運算數(shù)。對于邏輯AND運算來說,如果第一個運算數(shù)是false,那么無論第二個運算數(shù)的值是什么,結果都不可能等于true。
考慮下面的例子:
var bTrue = true;
var bResult = (bTrue && bUnknown); //發(fā)生錯誤
alert(bResult); //這一行不會執(zhí)行
這段代碼在進行邏輯AND運算時將引發(fā)錯誤,因為變量bUnknown是未定義的。變量bTrue的值為true,因為邏輯AND運算將繼續(xù)計算變量bUnknown。這樣做就會引發(fā)錯誤,因為bUnknown的值是undefined,不能用于邏輯AND運算。
如果修改這個例子,把第一個數(shù)設為false,那么就不會發(fā)生錯誤:
var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult); //輸出 "false"
在這段代碼中,腳本將輸出邏輯AND運算返回的值,即字符串"false"。即使變量bUnknown的值為undefined,它也不會被計算,因為第一個運算數(shù)的值是false。
提示:在使用邏輯AND運算符時,必須記住它的這種簡便計算特性。
ECMAScript中的邏輯OR運算符與Java中的相同,都由雙豎線(||)表示:
var bTrue = true;
var bFalse = false;
var bResult = bTrue || bFalse;
下面的真值表描述了邏輯OR運算符的行為:
運算數(shù) 1 | 運算數(shù) 2 | 結果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
與邏輯AND運算符相似,如果某個運算數(shù)不是Boolean值,邏輯OR運算并不一定返回Boolean值:
與邏輯AND運算符一樣,邏輯OR運算也是簡便運算。對于邏輯OR運算符來說,如果第一個運算數(shù)值為true,就不再計算第二個運算數(shù)。
例如:
var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult); //輸出 "true"
與前面的例子相同,變量bUnknown是未定義的。不過,由于變量bTrue的值為true,bUnknown不會被計算,因此輸出的是"true"。
如果把bTrue改為false,將發(fā)生錯誤:
var bFalse = false;
var bResult = (bFalse || bUnknown); //發(fā)生錯誤
alert(bResult); //不會執(zhí)行這一行
更多建議: