---
# System prepended metadata

title: undefined 和 null的異同

---

### 🔍小範例大學問👊
#  [<font color="#f00">JavaScript</font>] undefined 和 null的異同

## 1. 基本定義
* undefined：未定義，比如變數無賦予值的話該變數預設就會是 undefined。

* null：空值，是讓開發者用來宣告變數沒有值。

## 2. 型別測試

```javascript=
typeof null        // 'object'
typeof undefined   // 'undefined'

```
💬說明：null顯示的是型別是object(為什麼是物件？可以把他想成，回傳一個空對象來看)；而undefined顯示的型別就是undefined。

## 3. Boolean值判斷
```javascript=
console.log(null == undefined);  //true
console.log(null === undefined); //false
```
💬說明：雙等式時，null和undefined是true，但加上型別判斷的三等式時，理所當然出現了false。


## 💡 有趣小測試

```javascript=
let a = {
    myname:"peter",
    isHome:true
};

console.log(typeof null);//object
console.log(typeof a);//object

```
💬說明：null 和 a 都是物件型別，所以來計算看看。

```javascript=
console.log(null + "123");//null123
console.log(a + "123");//[object Object]123

a.age = 18;
console.log(a);//{myname: 'peter', isHome: true, age: 18}
console.log(a + "123");//[object Object]123
```
說明：很有趣的是，null雖然是物件，但自動轉型字串相加時，會以null做加法；而 a 物件會以[object Object]的形式做字串相加，不管屬性有幾項，a 仍然是呈現[object Object]。

## <font color="#f00">📌總整理</font>


|  undefined和null相似處                |
| -------------------------------------| 
| a.都没有屬性和方法，也不能額外添加屬性方法。 |
| b.皆為Falsy Value(Boolean判斷時為false) [*MDN文檔說明*](https://developer.mozilla.org/en-US/docs/Glossary/Falsy)                |
| c.皆為原始型別(Primitive Type)         | 


---
#### 參考文章
[Javascript中undefined和null的差異](https://snh90100.medium.com/javascript%E4%B8%ADundefined%E5%92%8Cnull%E7%9A%84%E5%B7%AE%E5%88%A5-1f48e9be5e02)
