[鐵人賽] Null & undefined 型態差異 - Node.js Day 7

Null & undefined 型態差異

空無是一種很奇妙的狀態,在 JavaScript 裡面,null, undefined 是一種奇妙的東西。今天來探討什麼是 null ,什麼是 undefined.

null

變數要經過宣告,賦予 null ,才會形成 null 型態。

var a=null;<br></br>

null 在 JavaScript 中表示一個空值。

undefined

從字面上就表示目前未定義,只要一個變數在初始的時候未給予任何值的時候,就會產生 undefined

var a;<br></br><br></br>console.log(a);<br></br><br></br>// print : undefined<br></br>

這個時候 a 就是屬於 undefined 的狀態。

另外一種狀況就是當 Object 被刪除的時候。

var a = {};<br></br><br></br>delete a;<br></br><br></br>console.log(a);<br></br><br></br>//print: undefined.<br></br>

Object 在之後會介紹,先記住有這個東西。而使用 delete 的時候,就可以讓這個 Object 被刪除,就會得到結果為 undefined.

兩者比較

null, undefined 在本質上差異並不大,不過實質上兩者並不同,如果硬是要比較,建議使用 = 來做為判斷標準,避免 null, undefined 這兩者被強制轉型。

var a=null,<br></br> b;<br></br><br></br>if (a === b) {<br></br> console.log('same');<br></br>} else {<br></br> console.log('different');<br></br>}<br></br><br></br>//print: different<br></br>

從 typeof 也可以看到兩者本質上的差異,

typeof null;<br></br>//print: 'object'<br></br><br></br>typeof undefined;<br></br>//print: 'undefined'<br></br>

null 本質上是屬於 object, 而 undefined 本質上屬於 undefined ,意味著在 undefined 的狀態下,都是屬於未定義。

如果用判斷式來決定,會發現另外一種狀態

Boolean(null);<br></br>// false<br></br><br></br>Boolean(undefined);<br></br>// false<br></br>

可以觀察到,如果一個變數值為 null, undefined 的狀態下,都是屬於 false。

這樣說明應該幫助到大家了解,其實要判斷一個物件、屬性是否存在,只需要使用 if

var a;<br></br><br></br>if (!a) {<br></br> console.log('a is not existed');<br></br>}<br></br><br></br>//print: a is not existed<br></br>

a 為 undefined 由判斷式來決定,是屬於 False 的狀態。

後記

在 Node.js 開發中比較少會碰到 null, undeinfed 的狀況,只要判斷都是使用 = ,不用偷工減料,讓前後端判斷標準一致,就可以完整判斷目前的數值型態為何。

在這邊提出 null, undefined 是為了讓大家更為了解 JavaScript 本身的一些謬誤,變數的部分到這邊一個段落結束,明天會從 Array 開始談起。

CaesarChi

Web developer, focus on website fullstack, special JavaScript, and love sharing developing experience and communicate with developers. http://about.me/clonn