null 和 undefined 的区别
一、概念
undefined?表示未定義,就是應(yīng)該有值但是還沒(méi)有賦值,連null的值都沒(méi)有賦予
null?代表空值,空引用。
二、區(qū)別
1.??null 和 undefined 雖然值的結(jié)果是相等的,但是其所代表的語(yǔ)義是完全不一樣的(==是相等的)。
? undefined 代表了某個(gè)變量完全不存在,在內(nèi)存中完全能不存在這個(gè)標(biāo)識(shí)符所指向的地址;
? null 代表了內(nèi)存中是存在這個(gè)變量的,只是我在某些情況下需要把這個(gè)變量原本的值給覆蓋了,將它設(shè)置為一個(gè)空。
2.??null 轉(zhuǎn)為數(shù)值是 0 ;? undefined 轉(zhuǎn)為數(shù)值是 NAN(not a number)。
3.??null 通過(guò) typeof 判斷類(lèi)型的時(shí)候結(jié)果的輸出是 object ; 而 undefined 的類(lèi)型是 undefined 。
那么為什么 typeof null 是 object ?
null 和 undefined 都是js語(yǔ)言的基礎(chǔ)數(shù)據(jù)類(lèi)型, 都是原始值類(lèi)型,但是 typeof null 是 object ,是因?yàn)椴煌膶?duì)象在底層都表現(xiàn)為二進(jìn)制,在? JavaScript? 中二進(jìn)制前三位都為 0 的話(huà)會(huì)被判斷為 object? 類(lèi)型,null 的二進(jìn)制全部都為 0 ,前三位自然也是 0 ,所以執(zhí)行 typeof 值會(huì)返回 object 。
4.??null 是 js 語(yǔ)言的關(guān)鍵字,是不允許用戶(hù)用來(lái)作為標(biāo)識(shí)符聲明變量的,但是 undefined 可以,undefined 不是關(guān)鍵字。
在 node 環(huán)境中,我們聲明的 undefined 會(huì)將原本的 undefined 覆蓋的,但是在瀏覽器環(huán)境中不會(huì),是因?yàn)闉g覽器中的 undefined 是直接被使用 Object.defineProperty 定義在了全局對(duì)象 window 上,默認(rèn)就已經(jīng)被配置成為了:值不可修改并且不可以被重新進(jìn)行配置。
?三、null 和 undefined分別在實(shí)際項(xiàng)目中出現(xiàn)的場(chǎng)景有哪些
1、 undefined
? ?a.?變量被聲明了,但是沒(méi)有被賦值;
? ?b.?調(diào)用函數(shù)的時(shí)候,應(yīng)該給函數(shù)傳參卻沒(méi)有給函數(shù)傳這個(gè)參數(shù)打印出來(lái)就是 undefined;
? ?c.?訪問(wèn)一個(gè)對(duì)象中沒(méi)有的屬性;
? ?d.?函數(shù)沒(méi)有返回值時(shí),默認(rèn)就會(huì)返回undefined。
2、 null
? ?a.作為對(duì)象原型鏈的終點(diǎn)出現(xiàn);
? ?b.當(dāng)我們?cè)L問(wèn)一個(gè)不存在的dom節(jié)點(diǎn)的時(shí)候。
?
總結(jié)
以上是生活随笔為你收集整理的null 和 undefined 的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: U盘修复“系统找不到指定文件”问题解决方
- 下一篇: 【EXLIBRIS】墙上的坏人