---
# System prepended metadata

title: 克服 JS 奇怪的部分 13. 存在與布林 Existence and booleans
tags: ["JavaScript\_", JavaScript 基礎]

---

### Existence and booleans

- 「存在」的概念及其與布林值的關聯通常指的是檢查某個值是否存在或將條件評估為布林值的結果。在編程中，這通常與檢查值的真實性或虛假性有關，這對於在條件語句中進行決策是至關重要的。

- 我們可以來看看下列的示例：

```js
// 以下是 Boolean() 執行後的參考：

var a;

console.log(null); // null
console.log(Boolean("")); // false
console.log(Boolean(a)); // false
```

### undefined 的陷阱

- 同樣都是 undefined，那麼為什麼被 Boolean() 包住的 undefined 結果為 `false`?

```js
console.log(undefined); // undefined 
console.log(Boolean(undefined)); // false
```

### Boolean()

- 在 JavaScript 中，Boolean() 是一個內建的全域函式，用於將給定的值轉換為對應的布林值。這種轉換通常稱為顯式轉換或強制轉換。

- 接續就是這篇筆記會提到的概念「Existence and booleans」。

### 存在與布林的關係

```js
let a;  

console.log(a); // a,本身沒給予任何值,預設 undefined

// 當 a 存在就跑 if (true) 反之跑 else (false)
if (a) {
  console.log("is undefined");
} else {
  console.log("is false"); // is false
}

- false 是該範例的結果，但你知道真相嗎？
```

### falsy

- 當你使用 if (a) 進行條件判斷時，JavaScript 會將` undefined` 視為**虛假值**(falsy)。所以，雖然 a 的值是 `undefined`，但在條件判斷中它被視為虛假，因此 else 分支會被執行，輸出 "is false"。

   - 這邊只需要理解，當判斷式裡的結果當下值不存在或者 undefined 就可視為 falsy。

### JavaScript 裡面的 falsy：

```js
JavaScript 中，以下值被視為虛假值（falsy values）：

false： 布林值 false。
0： 數字零。
""： 空字符串。
null： 表示無值或空。
undefined： 表示未初始化的變數。
NaN： 表示非數字的特殊值（Not-a-Number）。
```


- 下列範例，結果為何？這邊又可以參考一下相依性[表格](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Operators/Operator_precedence)。
  
```js
var a;

a = 0;

// 根據運算子優先序等級 , 會先判定 === 
// 此時 (a || true) -> 要知道這時候 a 是 false 
// 根據 || 的條件: false || true , 已經滿足一個條件,故執行 'test1'
if (a || a === 0) {
  console.log("test1");
} else {
  console.log("test2");
}

- 其實，更精準的說法是，根據運算子的等級順序
  1. 我們先執行了 === 這個特殊符號函數，再去執行 || 這個函數
  2. 最後，我們得到了這個結果。
```
###  JavaScript 裡面的 truthy：
```js
JavaScript 中，以下值被視為真值（truthy values）：

任何非空字串： "Hello"、"0"、"false" 等。
任何非零數字： 42、-3.14、Infinity 等。
任何非空物件： {}、[] 等。
函式： 宣告和定義的函式。
特殊值 true： 布林值 true。
```

