前面兩天提到的 ??
和 ?.
都是針對 undefined
和 null
的值做一些運算。
??
是將左側 undefined
和 null
回傳一個 default 值
undeinfed ?? 1 // 1
null ?? 1 // 1
?.
則是將讓左側為 undefined
和 null
的 property 回傳 undefined
let Undefined
Undefined?.property // undefined
let Null = null
Null?.property // undefined
這樣看起來 undefined
和 null
在使用上好像都一樣?究竟這兩者有什麼相同和不同的地方呢?我們來比較一下
皆為
falsy
values\ | undefined |
null |
---|---|---|
定義 | 未定義 | 定義為空值 |
typeof |
'undefined' | 'object' |
JSON | 無效 | 有效 |
序列化 | JSON.stringify({ property: undefined }) // {} |
JSON.stringify({ property: null }) // { property: null } |
依照場景下的意義
undefined
代表初始值 未被分配 或 定義null
代表 空 或 未知值得一提的是 TypeScript team 不使用 null
只用 undefined
也沒造成什麼問題,同時不同的 Library 有不同的作法,我們可以用 undeinfed
== null
來避免區分他們。
Head to Head Comparison Between Undefined and Null
Null vs. Undefined
Data types