---
# System prepended metadata

title: null & "空字串" & Undefined & not defined & NaN的差別
tags: [javascript]

---

# null & "空字串" & Undefined & not defined & NaN的差別
###### tags:`javascript`

* Undefined : 宣告沒給值(未定義)
當作變數宣告的預設值，一般變數宣告了但还沒給值(定義)的时候会返回 undefined
連是不是杯子都不知道
* not defined : 沒有宣告沒給值(未定義)
連宣告都沒宣告
* null :（沒有值） "沒看到沒有"空物件
用於赋值给一些可能会返回物件的變數，我要讓這個變數是空的，作为初始化。
是object物件
一個是連裝水的容器都沒有。如果欄位根本不存在，那就是null。
* "空字串" :（Empty空值） "什麼也沒有"
是string字串
本來裝水的容器今天沒裝水。如果這個欄位存在，但是沒有輸入任何內容，那就是取到空字串


* NaN : (不是一个数字)
用于指出数字类型中的错误情况，即“执行数学运算没有成功，这是失败后返回的结果”。



```
小紅帽生下來還沒看過狼
let wolf = undefined; 
// 有定義但沒給值，阿嬤跟它說有個東西叫做狼，很危險。但小紅帽還是"不知道它長的怎麼樣"…
每天向門外看說天上飛的那隻是狼嗎？地上爬的那條的是嗎？
let wolf = null; 
//沒看到沒有，有一天，小木偶到她家跟他說門外有狼，她打開"什麼都沒有"很確定門外沒有狼。
let wolf = ''; 
//知道牠是狼，但不知道它是什麼狼。
正確一點來說，空字串 是指已經確定它是字串了，只不過是沒有字的字串。
let wolf = '灰太狼'; 
//叫灰太狼的狼
let wolf = new 人('也是 ㄌㄤˊ，只不過是「色狼」'); 
//披著人皮的狼(變數可以裝不同的東西)
```
[出處於此](https://dotblogs.com.tw/gra/2018/06/10/121512)
```
let school="";
        console.log(school)//null
        console.log(typeof school)//object
```
