Published on

javascript中的undefined null

Authors

在javascript的五种基本数据类型中,有两和数据类型可能会经常给我们带来一些困惑,他们就是undefinednull了.

对于undefined来说

我们先来看一种情况:

var a;
console.log(a);//"undefined"
console.log(b);//报错

然后有

var a;
console.log(typeof a);//"undefined"
console.log(typeof b);//"undefined"

这里我们可以得出结论就是:未定义的变量,未初始化的变量,使用typeof的时候,他们的结果都是'undefined';而对于未定义的变量,他也只能使用typeof操作符,执行其它操作都将报错.(调用delete也不会报错,但没有任何意义);

从上面也可以看出,未初始化变量的默认值就是undefined,所以console.log(a == undefined)将会打印出true.

因此,良好的编程习惯应该这样:没必要显式地声明a = undefined;而对于任何变量,我们都应该显式的初始化一个除undefined外我们想要的值,这样当我们在应用typeof的时候,我们将可以很容易地知道undefined结果代表的是变量未声明.

对于null

我们也是先看一种情况

var a=null;
console.log(typeof a); //object;

这里我们可以看出,null是以一种空对象的形式保存的.所以对于任何我们即将要以对象的形式保存的变量,我们都可以使用null来进行初始化;

有一点不好理解的就是,当conslole.log(null == undefined)的时候,结果竟然返回的是true,其中的原因就是undefined是派生至null的.那么console.log(null === undefined)的结果肯定是false,因为他们是两种数据类型.

因为我们也就能够理解下面这段代码了:

console.log(Boolean(null));//false
console.log(Boolean(undefined));//false

对于undefinednull它们将存在于以下区别

1.在使用Boolean进行转换的时候,undefinednull都为false,而null所赋于的变量,拥有任何对象后都将会是true值.

2.在使用Number进行转换的时候,Number(null)的值为0,而Number(undefined)NaN.

3.在合作String进行转换的时候,String(null)的结果是"null",而String(undefined)的结果是"undefined".

我们还需要注意的一点就是,typeof操作符返回的结果是字符串.所以console.log(typeof undefined == undefined);的结果是false,所以typeof undefined返回的"undefined"非此undefined.