null
是一种语言关键字,评估为一个特殊的值,通常用于表示值的缺失。使用typeof
操作符与null
一起会返回字符串"object",这表明null
可以被视为表示"无对象"的特殊对象。然而,在实践中,null
通常被认为是其自身类型的唯一成员,并且用于表示数字、字符串和对象的值缺失。大多数编程语言都有与JavaScript的null
等价的值,例如NULL
、nil
或None
。
JavaScript中的undefined
也表示值的缺失,但意味着更深层次的不存在。具体而言,当变量的值尚未初始化时,它是undefined
,并且尝试访问不存在的对象属性或数组元素也会导致undefined
。此外,未明确返回值的函数将返回undefined
,并且未传递的函数参数的值将为undefined
。undefined
是预定义的全局常量(不同于像null
这样的语言关键字,尽管在实践中这种区别并不关键),其初始值为undefined
。对undefined
应用typeof
操作符将返回"undefined",表示这个值是其特殊类型的唯一成员。
撇开微小的差异,null
和undefined
都可以用来表示值的缺失,并且常常可以互换使用。相等性操作符==
将它们视为相等(要区分它们,必须使用严格相等操作符===
)。由于它们都是falsy值,所以它们可以在布尔上下文中用作false
。既null
也undefined
都没有属性或方法。实际上,在这些值上使用.
或[]
访问属性或方法会导致TypeError
。
在我看来,undefined
可以用于指示系统级别、意外或类似的错误,其中缺失一个值。另一方面,null
可以用于指示程序级别、正常或预期的值缺失。在实际编码中,我倾向于避免使用null
和undefined
。如果我需要将这样的值分配给变量或属性,或者从函数中传递/接收这样的值,我通常使用null
。然而,一些程序员积极避免使用null
,而更倾向于使用undefined
。