js中null和undefined的區別

天渺工作室發表於2023-03-18

js中null和undefined的區別?這也是一個常見的js面試題

相同點

1,都是基本型別。
2,做判斷值都是false。

!!null === false // true
!!undefined === false // true

不同點

1,誕生時間null在前,undefined在後。因為js作者Brendan-Eich在創造js語言時,直接抄了java很多東西。也包括null,後期發現js中的null有缺陷,又創造了undefined。(《JavaScript高階程式設計》中有說,下面的不同點就包含null缺點)

2,typeof 型別不同

typeof null; // 'object'
typeof undefined; // 'undefined'

3,Number() 轉數字也不同

Number(null); // 0
Number(undefined); // NaN     (Not a Number,非數)是電腦科學中數值資料型別的一類值,表示未定義或不可表示的值。

4,前端開發中出現的時機不同
   (1) null 觸發null的時機

// 舉例

// 獲取不存在的dom
document.getElementById("233") // null

// 獲取不存在的儲存
localStorage.getItem("233") // null
sessionStorage.getItem('233') // null
...

   (2) 觸發undefined的時機

// 舉例(undefined觸發時機太多,簡單舉例)

// 宣告變數未使用
var test1; // undefined

// 宣告變數未使用
var test1; // undefined

// 物件中找不到該屬性
var obj ={};
obj.a;  // undefined
...

5,函式引數有預設值時,當引數使用時預設引數 是否生效 效果不同。

function demo(data = '233'){
   console.log('_______'+data);
};
demo(null); // _______null
demo(undefined); // _______233

總結

null本質是一個表示"無值"的物件,算是一個特殊值。

undefined是一個表示"還沒有定義"的原始型別。