1、分析
javascript的数据类型共分为5种:object、number、boolean、string、undefined。其中null是object类型的特殊值,NaN是number的特殊值
var a1;
var a2 = true;
var a3 = 1;
var a4 = "Hello";
var a5 = new Object();
var a6 = null;
var a7 = NaN;
var a8 = undefined;
alert(typeof a); //显示"undefined" ,这是因为a没有定义
alert(typeof a1); //显示"undefined" , 这是因为a1声明了,但没赋值
alert(typeof a2); //显示"boolean"
alert(typeof a3); //显示"number"
alert(typeof a4); //显示"string"
alert(typeof a5); //显示"object"
alert(typeof a6); //显示"object"
alert(typeof a7); //显示"number"
alert(typeof a8); //显示"undefined" 声明了,并且赋值为"undefined"
由上面可以看出typeof得到的值为undefined有三种情况:
(1)没有定义;(2)定义了没赋初始值;(3)定义了,并赋值为undefined
由于typeof是获取变量的数据类型,而Null和NaN不是数据类型里面的,故不可能会得到Null和NaN
当一个变量定义为var x = null; 用typeof表达式得到object
当以个变量定义为var x = NaN; 用typeof表达式得到number
需要注意的是,当一个变量用typeof得到的值是undefined的时候,直接输出该变量的值也是undefined;而var x = null; 和 var x = NaN; 如果直接输出x,得到的值分别是null和NaN
2、关于它们的比较运算
var a1; //a1的值为undefined
var a2 = null;
var a3 = NaN;
alert(a1 == a2); //显示"true"
alert(a1 != a2); //显示"false"
alert(a1 == a3); //显示"false"
alert(a1 != a3); //显示"true"
alert(a2 == a3); //显示"false"
alert(a2 != a3); //显示"true"
alert(a3 == a3); //显示"false"
alert(a3 != a3); //显示"true"
结论:undefined与null相等,undefined、null都与NaN不相等,并且NaN也不等于NaN