undefined类型的值仅有一个,即undefined,该值用于表示某个变量不存在或者没有为其分配值,此外,它还表示对象的属性不存在,该值不属于JavaScript保留字。
注:如果定义了一个变量却没有为其赋值,则该变量的值默认为undefined,这个值是系统默认分配的。此外,访问对象并不存在的属性时,该属性也返回undefined。
null则用于表示变量的值为空,是JavaScript的保留字。
从二者的定义来看,它们的区别不是很明显。
总的来说,undefined表示没有为变量设置值或者属性不存在,而null则表示变量有值,只不过其值为null。说白了,二者的区别就是有没有值,存不存在。
下面来看一段代码:
<script type="text/javascript">
var x,y=null;
//判断x y的值是否为空
if(x===undefined)
{
alert('声明变量后没有赋初值,默认其值为undefined。');
}
if(x===null)
{
alert('声明变量后默认值为null');
}
//判断x(其值为undefined)与y(其值为null)是否相等
if(x==y)
{
alert('x等于(==)y');
}
//判断x与y是否严格相等
if(x===y)
{
alert('x严格等于(===)y');
}
else{
alert('x不严格等于(!==)y');
}
//测试一个并不存在的数。
if(String.xyz===undefined)
{
alert('不存在的属性值默认为undefined');
}
</script>
上面代码的执行结果是,x为undefined,x==y返回真,弹出“x等于(==)y”,而x===y为假,弹出“x不严格等于(!==)y”,最后弹出“不存在的属性值默认为undefined”。
看了上面的代码以及运行结果之后,我想大家应该也就理解了这两者的区别。
总的来说,如果不进行精确比较的话,很多时候undefined和null本身就相等,但是若是精确区分的话,这两个值就不相等了。这个从上文中x==y 和x===y的判断就可以知道。
还是文章开头的那句话,这两个的区别就在于:存不存在,有没有值。存在没值或不存在的是undefined,存在有值的是null。