JS中undefined和null的區(qū)別
●?JavaScript 真是一個(gè)特殊的語言, 其他語言都只有一個(gè)表示 "無" 的值, 比如 Java 語言用的是 null, C 語言用的是 NULL, Python 語言用的是 None, Ruby 語言用的是 nil. 只有 JS 里面表示 "空" 的有兩個(gè), 一個(gè)是 undefined, 一個(gè)是 null
●?很多小朋友在剛開始學(xué)習(xí)的時(shí)候, 都會(huì)有一個(gè)疑問, 就是 undefined 和 null 二者之間有什么區(qū)別呢 ? 我什么時(shí)候該用什么呢 ?
●?接下來, 咱們就來好好聊一聊
JS的基本數(shù)據(jù)類型
●?在 JS 內(nèi), 有幾個(gè)基本數(shù)據(jù)類型
●?ES5
????○?Number 數(shù)值
????○?String 字符串
????○?Boolean 布爾
????○?Undefined 空
????○?Null 空
●?ES6
????○?Symbel 唯一值
●?undefined 和 null 其實(shí)就是 JS 中的基本數(shù)據(jù)類型, 空類型
????○?從這個(gè)角度來看, 他們兩個(gè)是一樣的, 都表示 空 的意思
????○?并且在進(jìn)行數(shù)據(jù)類型比較的時(shí)候, 某些情況下也是一樣的
兩者的區(qū)別
●?兩者的區(qū)別還是在于含義
●?之前我們說過, 所有的數(shù)據(jù)在計(jì)算機(jī)都是以二進(jìn)制形式存儲(chǔ)的
●?那么這兩個(gè)數(shù)據(jù)也是會(huì)按照二進(jìn)制形式存儲(chǔ)的
????○?undefined 因?yàn)楸硎镜氖?"沒有", 所以沒得轉(zhuǎn)換, 啥也沒有
????○?null 因?yàn)楸硎镜氖?"空", 其實(shí)是有內(nèi)容, 只不過有一個(gè)空內(nèi)容, 存儲(chǔ)的是 0000 0000 ...
●?那么反饋到我們的代碼內(nèi)
????○?undefined 就是沒有值, 或者說未被賦值
????○?null 就是有值, 有一個(gè)空值, 一般會(huì)被當(dāng)做這里有一個(gè)空對(duì)象, 也叫作空指針
●?舉個(gè)例子 : 咱們以數(shù)字為例
????○?

這就是有一個(gè)具體的數(shù)字, 100 200 什么的
????○?

這就是 0, 用完了, 沒有了
????○?

這就是 null, 有一個(gè)空架子, 其他的什么都沒有
????○?

這就是 undefined, 連個(gè)架子都沒有
●?根據(jù)上面的例子
????○?undefined, 你什么都不需要做, 只要什么也不賦值就是 undefined
????○?null, 需要你賦值, 直接賦值為一個(gè) null, 也就是你要安裝一個(gè)空架子
兩者對(duì)比
1.? 數(shù)據(jù)類型不同, 但是值相同
????○?兩個(gè)數(shù)據(jù)分別屬于 Undefined 類型和 Null 類型
????○?但是表示的值都是空
????○?所以在比較的時(shí)候, 我們要注意
2.? 數(shù)據(jù)類型轉(zhuǎn)換成為數(shù)值類型的時(shí)候結(jié)果不一樣
????○? null 表示空, 存儲(chǔ)的時(shí)候也是一大堆 0, 所以轉(zhuǎn)換為數(shù)值是 0
????○?undefined 表示沒有, 什么都沒有內(nèi)容轉(zhuǎn)換為數(shù)值以后是 NaN
3.? 使用場(chǎng)景不同
●?null
????○?在我們需要一個(gè)空值或者置空變量的時(shí)候手動(dòng)賦值
????○?原型鏈的終點(diǎn)位置, 也就是 Object.prototype.__proto__ 是 null
●?undefined
????○?在變量聲明未賦值的時(shí)候就是 undefined
????○?函數(shù)只有形參沒有實(shí)參的時(shí)候, 這個(gè)形參的值也是 undefined
????○?如果一個(gè)函數(shù)沒有設(shè)置返回值, 那么這個(gè)函數(shù)的返回值也是 undefined
總結(jié)
●?總之, 我們就記住一個(gè)原則
????○?當(dāng)你什么也沒有做過的時(shí)候, 那么就是 undefined
????○?只有你想白干活的時(shí)候, 那么你就手動(dòng)給他寫成 null 就好了