JavaScript 的 undefined 與 null 有什麼差異?

JavaScript 除了有 Number、String 與 Boolean 等型別外,常見的還有 undefined 與 null 這兩種型別。今天就來介紹這兩者是什麼及其差異。

undefined 與 null 值如其型別

兩者值如其型別。如下:

1
2
3
let a;
let b = null;
console.log(a, b); // output: undefined null

何時出現 undefined?

  • 變數已被宣告,但沒有給予值(未被定義)
  • 使用 var 宣告時出現的 hoisting 狀況

變數已被宣告,但沒有給予值(未被定義)

1
2
let a;
console.log(a); // output: undefined

使用 var 宣告時出現的 hoisting 狀況

JavaScript 編譯時會先將所有變數掃過一輪,先畫出記憶體空間後再賦予值到變數。因此使用 var 宣告變數,會出現在宣告變數前就嘗試取值,但因為還沒賦予值,而出現 undefined 訊息。

另外,因為有先畫出空間,代表 JavaScript 知道有這個變數,只是還沒到宣告那一行,因此不會出現沒有定義變數訊息 a is not defined

1
2
3
console.log(a); // output: undefined
var a = 1;
console.log(a); // output: 1

但如果利用 let 宣告變數,錯誤訊息會換成 Uncaught ReferenceError: Cannot access 'a' before initialization

何時出現 null?

  • 宣告變數時,賦予值為空值。
  • 原本變數有值想清空,賦予值為空值。
1
2
3
let a = null; // 宣告變數時賦予值為空值
let b = 1;
b = null; // 將原本變數值清空

參考資料


希望我的文章能夠幫助到你,有任何問題或是想與我討論交流,歡迎透過留言與我分享你的觀點。

如果你喜歡我的文章,想支持我繼續撰寫更多文章,歡迎你:

  1. 將我的部落格加入書籤,隨時造訪部落格。
  2. 將我的文章分享給你的親朋好友。
  3. 透過 LikeButton 幫我按 5 下讚。
  4. 每月贊助 LikeCoin 請我喝杯咖啡。(雖然我不喝咖啡啦 XD)