1.undefined类型
Undefined类型只有一个值,即特殊的undefined。
在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。
var message;
alert(message == undefined); //true
引入这个值的目的是为了正式区分空对象指针(null)与未经初始化的变量。
不过,包含undefined值的变量和尚未定义的变量还是不一样的。
var message;//这个变量声明后默认取得了undefined值
//下面这个变量没有声明
//var age
alert(message); //“undefined”
alert(age); //产生错误
对于尚未声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型。
var message;//这个变量声明后默认取得了undefined值
//下面这个变量没有声明
//var age
alert(typeof message); //“undefined”
alert(typeof age); //“undefined”
void运算符
undefined是一个内置标识符,它的值为undefined,通过viod运算符即可得到该值。viod表达式没有返回值,因此返回结果是undefined。void并不改变表达式的结果,只是让表达式不返回值。
var a = 42;
console.log(void a ,a); //undefined 42
按惯例我们用void 0来获得Undefined。void 0,void 1 和undefined之间并还没有实质上的区别。
2.Null类型
Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,而这个正是typeof(null)==object的原因。
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样只要直接检查null值就可以知道相应的变量是否保存了一个对象的引用。
if(car != null){
//对car对象执行某些操作
}
实际上,undefined值是派生自null值的,所以null == undefined //true
只要意在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null值。这样做不仅可以体现null作为空类对象指针的惯例,而且也有助于进一步区分null 和undefined.
3.NaN(Number类型)
NaN即非数值,是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。
NaN本身有两个特点:
任何涉及NaN的操作 (NaN/10)都会返回NaN
NaN与任何值都不相等,包括NaN本身
针对这两个特点,ES定义了isNaN()函数。这个函数接收一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换成数值,例如字符串“10”或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true.