1.辨别
null表示一个“空”的值,它和0以及空字符串’‘不同,0是一个数值,’'表示长度为0的字符串,而null表示“空”。
undefined表示值未定义。
NaN表示非数值。
好的,不多说。直接上代码解释比较好理解。
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"
alert(typeof a1); //显示"undefined"
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,null是一种特殊的object,NaN是一种特殊的number。
var a1; //a1的值为undefined
var a2 = null;
var a3 = NaN;
alert(a1 == a2); //显示"true"
alert(a1 == a3); //显示"false"
alert(a2 == a3); //显示"false"
alert(a3 == a3); //显示"false"
alert(a1 === a1); //显示"true"
alert(a1 === a2); //显示"false"
alert(a1 === a3); //显示"false"
alert(a2 === a2); //显示"true"
alert(a2 === a3); //显示"false"
alert(a3 === a3); //显示"false"
从上面的代码可以得出结论:
(1)undefined与null是相等,但并不完全相等(因为类型不一样);
(2)NaN与任何值都不相等,与自己也不相等。
alert(undefined == false); //"false"
alert(null == false); //"false"
alert(NaN == false); //"false"
alert(false == false); //"true"
alert(false === false); //"true"
上面例子说明undefined、null、NaN和false都不相等,false和false完全相等。
alert(NaN == NaN); //"false"
alert(NaN === NaN); //"false"
isNaN(NaN); // "true"
唯一能判断NaN的方法是通过isNaN()函数:
2.类型检测
<script>
// 安全检测JavaScript基本数据类型和内置对象
// 参数:o表示检测的值
// 返回值:返回字符串"undefined"、"number"、"boolean"、"string"、"function"、"regexp"、"array"、"date"、"error"、"object"或"null"
function typeOf(o){
var _toString = Object.prototype.toString;
// 获取对象的toString()方法引用
// 列举基本数据类型和内置对象类型,可以进一步补充该数组的检测数据类型范围
var _type ={
"undefined" : "undefined",
"number" : "number",
"boolean" : "boolean",
"string" : "string",
"[object Function]" : "function",
"[object RegExp]" : "regexp",
"[object Array]" : "array",
"[object Date]" : "date",
"[object Error]" : "error"
}
return _type[typeof o] || _type[_toString.call(o)] || (o ? "object" : "null");
}
var a = Math.abs;
alert(typeOf(a)); //"function"
</script>
使用这个方法可以避免在typeof检测null值时返回"object",而不是"null",测试NaN时返回的时NaN,测试undefined时会返回undefined,测试false时会返回false。
下面这段代码有兴趣的同学可以好好看一下。
//!!将值变为布尔值,但是值的类型并没有发生改变。
{a: 11} == {a: 11} //"false"
{a: 11} === {a: 11} //"false"
a = 0; !!a //"false"
typeof(a) //"number"
a = ' '; !!a //"true"
typeof(a) //"string"
a = []; !!a //"true"
typeof(a) //"object"