JavaScript中的null和undefined
`null`是一種語言關(guān)鍵字,評(píng)估為一個(gè)特殊的值,通常用于表示值的缺失。使用`typeof`操作符與`null`一起會(huì)返回字符串"object",這表明`null`可以被視為表示"無對(duì)象"的特殊對(duì)象。然而,在實(shí)踐中,`null`通常被認(rèn)為是其自身類型的唯一成員,并且用于表示數(shù)字、字符串和對(duì)象的值缺失。大多數(shù)編程語言都有與JavaScript的`null`等價(jià)的值,例如`NULL`、`nil`或`None`。
JavaScript中的`undefined`也表示值的缺失,但意味著更深層次的不存在。具體而言,當(dāng)變量的值尚未初始化時(shí),它是`undefined`,并且嘗試訪問不存在的對(duì)象屬性或數(shù)組元素也會(huì)導(dǎo)致`undefined`。此外,未明確返回值的函數(shù)將返回`undefined`,并且未傳遞的函數(shù)參數(shù)的值將為`undefined`。`undefined`是預(yù)定義的全局常量(不同于像`null`這樣的語言關(guān)鍵字,盡管在實(shí)踐中這種區(qū)別并不關(guān)鍵),其初始值為`undefined`。對(duì)`undefined`應(yīng)用`typeof`操作符將返回"undefined",表示這個(gè)值是其特殊類型的唯一成員。
撇開微小的差異,`null`和`undefined`都可以用來表示值的缺失,并且常??梢曰Q使用。相等性操作符`==`將它們視為相等(要區(qū)分它們,必須使用嚴(yán)格相等操作符`===`)。由于它們都是falsy值,所以它們可以在布爾上下文中用作`false`。既`null`也`undefined`都沒有屬性或方法。實(shí)際上,在這些值上使用`.`或`[]`訪問屬性或方法會(huì)導(dǎo)致`TypeError`。
在我看來,`undefined`可以用于指示系統(tǒng)級(jí)別、意外或類似的錯(cuò)誤,其中缺失一個(gè)值。另一方面,`null`可以用于指示程序級(jí)別、正常或預(yù)期的值缺失。在實(shí)際編碼中,我傾向于避免使用`null`和`undefined`。如果我需要將這樣的值分配給變量或?qū)傩裕蛘邚暮瘮?shù)中傳遞/接收這樣的值,我通常使用`null`。然而,一些程序員積極避免使用`null`,而更傾向于使用`undefined`。
(程序員的軟技能:ke.qq.com/course/6034346)