null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”。对null执行typeof预算,结果返回“Object”,也就是说,可以将null认为是一个特殊的对象值,含义是“非对象”。但实际上,通常认为null是它自由类型的唯一一个成员,它可以表示数字、字符串和对象是无值的。
undefined同样表示值的空缺,用未定义的值表示更层次的”空值“。它是变量的一种取值,表明变量没有初始化。如果查询对象属性或者数组中元素的值时返回undefined则说明这个属性或元素不存在。如果函数没有返回任何值,则返回undefined。引用没有提供实参的函数形参的值也只会得到undefined。undefined是预定义的全局变量。
通常我理解undefined是表示系统级的、出乎意料的或类似错误的值,而null表示程序级、正常的或在意料中的值的空缺,一般给变量、属性赋值,最好选择null。