# Boolean 對象
## 概述
`Boolean`對象是 JavaScript 的三個包裝對象之一。作為構造函數,它主要用于生成布爾值的包裝對象實例。
```javascript
var b = new Boolean(true);
typeof b // "object"
b.valueOf() // true
```
上面代碼的變量`b`是一個`Boolean`對象的實例,它的類型是對象,值為布爾值`true`。
注意,`false`對應的包裝對象實例,布爾運算結果也是`true`。
```javascript
if (new Boolean(false)) {
console.log('true');
} // true
if (new Boolean(false).valueOf()) {
console.log('true');
} // 無輸出
```
上面代碼的第一個例子之所以得到`true`,是因為`false`對應的包裝對象實例是一個對象,進行邏輯運算時,被自動轉化成布爾值`true`(因為所有對象對應的布爾值都是`true`)。而實例的`valueOf`方法,則返回實例對應的原始值,本例為`false`。
## Boolean 函數的類型轉換作用
`Boolean`對象除了可以作為構造函數,還可以單獨使用,將任意值轉為布爾值。這時`Boolean`就是一個單純的工具方法。
```javascript
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean('') // false
Boolean(NaN) // false
Boolean(1) // true
Boolean('false') // true
Boolean([]) // true
Boolean({}) // true
Boolean(function () {}) // true
Boolean(/foo/) // true
```
上面代碼中幾種得到`true`的情況,都值得認真記住。
順便提一下,使用雙重的否運算符(`!`)也可以將任意值轉為對應的布爾值。
```javascript
!!undefined // false
!!null // false
!!0 // false
!!'' // false
!!NaN // false
!!1 // true
!!'false' // true
!![] // true
!!{} // true
!!function(){} // true
!!/foo/ // true
```
最后,對于一些特殊值,`Boolean`對象前面加不加`new`,會得到完全相反的結果,必須小心。
```javascript
if (Boolean(false)) {
console.log('true');
} // 無輸出
if (new Boolean(false)) {
console.log('true');
} // true
if (Boolean(null)) {
console.log('true');
} // 無輸出
if (new Boolean(null)) {
console.log('true');
} // true
```
- 前言
- 入門篇
- 導論
- 歷史
- 基本語法
- 數據類型
- 概述
- null,undefined 和布爾值
- 數值
- 字符串
- 對象
- 函數
- 數組
- 運算符
- 算術運算符
- 比較運算符
- 布爾運算符
- 二進制位運算符
- 其他運算符,運算順序
- 語法專題
- 數據類型的轉換
- 錯誤處理機制
- 編程風格
- console 對象與控制臺
- 標準庫
- Object 對象
- 屬性描述對象
- Array 對象
- 包裝對象
- Boolean 對象
- Number 對象
- String 對象
- Math 對象
- Date 對象
- RegExp 對象
- JSON 對象
- 面向對象編程
- 實例對象與 new 命令
- this 關鍵字
- 對象的繼承
- Object 對象的相關方法
- 嚴格模式
- 異步操作
- 概述
- 定時器
- Promise 對象
- DOM
- 概述
- Node 接口
- NodeList 接口,HTMLCollection 接口
- ParentNode 接口,ChildNode 接口
- Document 節點
- Element 節點
- 屬性的操作
- Text 節點和 DocumentFragment 節點
- CSS 操作
- Mutation Observer API
- 事件
- EventTarget 接口
- 事件模型
- Event 對象
- 鼠標事件
- 鍵盤事件
- 進度事件
- 表單事件
- 觸摸事件
- 拖拉事件
- 其他常見事件
- GlobalEventHandlers 接口
- 瀏覽器模型
- 瀏覽器模型概述
- window 對象
- Navigator 對象,Screen 對象
- Cookie
- XMLHttpRequest 對象
- 同源限制
- CORS 通信
- Storage 接口
- History 對象
- Location 對象,URL 對象,URLSearchParams 對象
- ArrayBuffer 對象,Blob 對象
- File 對象,FileList 對象,FileReader 對象
- 表單,FormData 對象
- IndexedDB API
- Web Worker
- 附錄:網頁元素接口
- a
- img
- form
- input
- button
- option
- video,audio