# 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));
```
結果:
```
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); //不會執行這一行
```
- JavaScript 基礎
- JavaScript 簡介
- JavaScript 使用
- JavaScript 輸出
- JavaScript 語句
- JavaScript 注釋
- JavaScript 變量
- JavaScript 數據類型
- JavaScript 對象
- JavaScript 函數
- JavaScript 運算符
- JavaScript 比較和邏輯運算符
- JavaScript If...Else 語句
- JavaScript Switch 語句
- JavaScript For 循環
- JavaScript While 循環
- JavaScript Break 和 Continue 語句
- JavaScript 錯誤 - Throw、Try 和 Catch
- JavaScript 表單驗證
- JavaScript 保留關鍵字
- JavaScript JSON
- javascript:void(0) 含義
- JavaScript 高級
- JavaScript 對象
- JavaScript Number 對象
- JavaScript 字符串(String)對象
- JavaScript Date(日期)對象
- JavaScript Array(數組)對象
- JavaScript Boolean(邏輯)對象
- JavaScript Math(算數)對象
- JavaScript RegExp 對象
- JavaScript BOM
- JavaScript Window - 瀏覽器對象模型
- JavaScript Window Screen
- JavaScript Window Location
- JavaScript Window History
- JavaScript Window Navigator
- JavaScript 消息框
- JavaScript 計時
- JavaScript Cookies
- HTML DOM
- HTML DOM 簡介
- HTML DOM 節點
- HTML DOM 方法
- HTML DOM 屬性
- HTML DOM 訪問
- HTML DOM - 修改
- HTML DOM - 修改 HTML 內容
- HTML DOM - 元素
- HTML DOM - 事件
- HTML DOM - 導航
- JavaScript HTML DOM EventListener
- AJAX 教程
- AJAX 簡介
- AJAX 實例
- AJAX - 創建 XMLHttpRequest 對象
- AJAX - 向服務器發送請求
- AJAX - 服務器響應
- AJAX - onreadystatechange 事件
- AJAX ASP/PHP 請求實例
- AJAX 數據庫實例
- AJAX XML 實例
- jQuery 基礎
- jQuery 簡介
- jQuery 安裝
- jQuery 語法
- jQuery 選擇器
- jQuery 事件
- jQuery 效果
- jQuery 效果 - 隱藏和顯示
- jQuery 效果 - 淡入淡出
- jQuery 效果 - 滑動
- jQuery 效果 - 動畫
- jQuery 停止動畫
- jQuery Callback 函數
- jQuery - Chaining
- jQuery HTML
- jQuery - 獲得內容和屬性
- jQuery - 設置內容和屬性
- jQuery - 添加元素
- jQuery - 刪除元素
- jQuery - 獲取并設置 CSS 類
- jQuery - css() 方法
- jQuery - 尺寸
- jQuery 遍歷
- jQuery 遍歷
- jQuery 遍歷 - 祖先
- jQuery 遍歷 - 后代
- jQuery 遍歷 - 同胞
- jQuery 遍歷 - 過濾
- jQuery - AJAX
- jQuery - AJAX 簡介
- jQuery - AJAX load() 方法
- jQuery - AJAX get() 和 post() 方法
- jQuery 雜項
- jQuery - noConflict() 方法
- JavaScript 高級教程
- JavaScript 的歷史
- JavaScript 實現
- ECMAScript 基礎
- ECMAScript 語法
- ECMAScript 變量
- ECMAScript 關鍵字
- ECMAScript 保留字
- ECMAScript 原始值和引用值
- ECMAScript 原始類型
- ECMAScript 類型轉換
- ECMAScript 引用類型
- ECMAScript 運算符
- ECMAScript 一元運算符
- ECMAScript 位運算符
- ECMAScript Boolean 運算符
- ECMAScript 乘性運算符
- ECMAScript 加性運算符
- ECMAScript 關系運算符
- ECMAScript 等性運算符
- ECMAScript 條件運算符
- ECMAScript 賦值運算符
- ECMAScript 逗號運算符
- ECMAScript 語句
- ECMAScript if 語句
- ECMAScript 迭代語句
- ECMAScript 標簽語句
- ECMAScript break 和 continue 語句
- ECMAScript with 語句
- ECMAScript switch 語句
- ECMAScript 函數
- ECMAScript 函數概述
- ECMAScript arguments 對象
- ECMAScript Function 對象(類)
- ECMAScript 閉包(closure)
- ECMAScript 對象
- ECMAScript 面向對象技術
- ECMAScript 對象應用
- ECMAScript 對象類型
- ECMAScript 對象作用域
- ECMAScript 定義類或對象
- ECMAScript 修改對象
- ECMAScript 繼承
- ECMAScript 繼承機制實例
- ECMAScript 繼承機制實現
- Google 地圖API
- Google 地圖API Key
- Google Maps 基礎
- Google 地圖疊加層
- Google 地圖事件
- Google 地圖控件集
- Google 地圖類型
- Google 地圖 API 參考手冊
- 地圖 API Map() 構造器
- 免責聲明