1. 程式人生 > 實用技巧 >本文章介紹ECMAScript Boolean 運算子

本文章介紹ECMAScript Boolean 運算子

Boolean 運算子非常重要,它使得程式語言得以正常執行。

Boolean 運算子有三種:NOT、AND 和 OR。

ToBoolean 操作

在學習各種邏輯運算子之前,讓我們先了解一下 ECMAScript-262 v5 規範中描述的 ToBoolean 操作。

抽象操作 ToBoolean 將其引數按照下表中的規則轉換為邏輯值:

引數型別結果
Undefined false
Null false
Boolean 結果等於輸入的引數(不轉換)
Number 如果引數為 +0, -0 或 NaN,則結果為 false;否則為 true。
String 如果引數為空字串,則結果為 false;否則為 true。
Object true

邏輯 NOT 運算子

在 ECMAScript 中,邏輯 NOT 運算子與 C 和 Java 中的邏輯 NOT 運算子相同,都由感嘆號(!)表示。

與邏輯 OR 和邏輯 AND 運算子不同的是,邏輯 NOT 運算子返回的一定是 Boolean 值

邏輯 NOT 運算子的行為如下:

  • 如果運算數是物件,返回 false
  • 如果運算數是數字 0,返回 true
  • 如果運算數是 0 以外的任何數字,返回 false
  • 如果運算數是 null,返回 true
  • 如果運算數是 NaN,返回 true
  • 如果運算數是 undefined,發生錯誤

通常,該運算子用於控制迴圈:

var bFound = false;
var i = 0;

while (!bFound) {
  if (aValue[i] == vSearchValues) {
    bFound = true;
  } else {
    i++;
  }
}

  

在這個例子中,Boolean 變數(bFound)用於記錄檢索是否成功。找到問題中的資料項時,bFound 將被設定為 true,!bFound 將等於 false,意味著執行將跳出 while 迴圈。

判斷 ECMAScript 變數的 Boolean 值時,也可以使用邏輯 NOT 運算子。這樣做需要在一行程式碼中使用兩個 NOT 運算子。無論運算數是什麼型別,第一個 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));

  

結果:

NBA錄影

bFalse 的邏輯值是 false
sRed 的邏輯值是 true
iZero 的邏輯值是 false
iThreeFourFive 的邏輯值是 true
oObject 的邏輯值是 true 

  

邏輯 AND 運算子

在 ECMAScript 中,邏輯 AND 運算子用雙和號(&&)表示:

例如:

var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

  

下面的真值表描述了邏輯 AND 運算子的行為:

運算數 1運算數 2結果
true true true
true false false
false true false
false false false

邏輯 AND 運算的運算數可以是任何型別的,不止是 Boolean 值。

如果某個運算數不是原始的 Boolean 型值,邏輯 AND 運算並不一定返回 Boolean 值:

  • 如果一個運算數是物件,另一個是 Boolean 值,返回該物件。
  • 如果兩個運算數都是物件,返回第二個物件。
  • 如果某個運算數是 null,返回 null。
  • 如果某個運算數是 NaN,返回 NaN。
  • 如果某個運算數是 undefined,發生錯誤。

與 Java 中的邏輯 AND 運算相似,ECMAScript 中的邏輯 AND 運算也是簡便運算,即如果第一個運算數決定了結果,就不再計算第二個運算數。對於邏輯 AND 運算來說,如果第一個運算數是 false,那麼無論第二個運算數的值是什麼,結果都不可能等於 true。

考慮下面的例子:

var bTrue = true;
var bResult = (bTrue && bUnknown);	//發生錯誤
alert(bResult);			//這一行不會執行

  

這段程式碼在進行邏輯 AND 運算時將引發錯誤,因為變數 bUnknown 是未定義的。變數 bTrue 的值為 true,因為邏輯 AND 運算將繼續計算變數 bUnknown。這樣做就會引發錯誤,因為 bUnknown 的值是 undefined,不能用於邏輯 AND 運算。

如果修改這個例子,把第一個數設為 false,那麼就不會發生錯誤:

var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult);			//輸出 "false"

  

在這段程式碼中,指令碼將輸出邏輯 AND 運算返回的值,即字串 "false"。即使變數 bUnknown 的值為 undefined,它也不會被計算,因為第一個運算數的值是 false。

提示:在使用邏輯 AND 運算子時,必須記住它的這種簡便計算特性。

邏輯 OR 運算子

ECMAScript 中的邏輯 OR 運算子與 Java 中的相同,都由雙豎線(||)表示:

var bTrue = true;
var bFalse = false;
var bResult = bTrue || bFalse;

  

下面的真值表描述了邏輯 OR 運算子的行為:

運算數 1運算數 2結果
true true true
true false true
false true true
false false

false

與邏輯 AND 運算子相似,如果某個運算數不是 Boolean 值,邏輯 OR 運算並不一定返回 Boolean 值:

  • 如果一個運算數是物件,並且該物件左邊的運算數值均為 false,則返回該物件。
  • 如果兩個運算數都是物件,返回第一個物件。
  • 如果最後一個運算數是 null,並且其他運算數值均為 false,則返回 null。
  • 如果最後一個運算數是 NaN,並且其他運算數值均為 false,則返回 NaN。
  • 如果某個運算數是 undefined,發生錯誤。

與邏輯 AND 運算子一樣,邏輯 OR 運算也是簡便運算。對於邏輯 OR 運算子來說,如果第一個運算數值為 true,就不再計算第二個運算數。

例如:

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			//輸出 "true"

  

與前面的例子相同,變數 bUnknown 是未定義的。不過,由於變數 bTrue 的值為 true,bUnknown 不會被計算,因此輸出的是 "true"。

如果把 bTrue 改為 false,將發生錯誤:

var bFalse = false;
var bResult = (bFalse || bUnknown);	//發生錯誤
alert(bResult);			//不會執行這一行