一、概念
undefined 表示未定義,就是應該有值但是還沒有賦值,連null的值都沒有賦予
null 代表空值,空引用。
二、區(qū)別
1.??null 和 undefined 雖然值的結果是相等的,但是其所代表的語義是完全不一樣的(==是相等的)。
? undefined 代表了某個變量完全不存在,在內存中完全能不存在這個標識符所指向的地址;
? null 代表了內存中是存在這個變量的,只是我在某些情況下需要把這個變量原本的值給覆蓋了,將它設置為一個空。
2.??null 轉為數(shù)值是 0 ;? undefined 轉為數(shù)值是 NAN(not a number)。
3.??null 通過 typeof 判斷類型的時候結果的輸出是 object ; 而 undefined 的類型是 undefined 。
那么為什么 typeof null 是 object ?
null 和 undefined 都是js語言的基礎數(shù)據(jù)類型, 都是原始值類型,但是 typeof null 是 object ,是因為不同的對象在底層都表現(xiàn)為二進制,在? JavaScript? 中二進制前三位都為 0 的話會被判斷為 object? 類型,null 的二進制全部都為 0 ,前三位自然也是 0 ,所以執(zhí)行 typeof 值會返回 object 。
4.??null 是 js 語言的關鍵字,是不允許用戶用來作為標識符聲明變量的,但是 undefined 可以,undefined 不是關鍵字。

?三、null 和 undefined分別在實際項目中出現(xiàn)的場景有哪些
1、 undefined
? ?a. 變量被聲明了,但是沒有被賦值;
? ?b. 調用函數(shù)的時候,應該給函數(shù)傳參卻沒有給函數(shù)傳這個參數(shù)打印出來就是 undefined;
? ?c. 訪問一個對象中沒有的屬性;
? ?d. 函數(shù)沒有返回值時,默認就會返回undefined。
2、 null
? ?a.作為對象原型鏈的終點出現(xiàn);
? ?b.當我們訪問一個不存在的dom節(jié)點的時候。