JavaScript中null、underfined、NaN的辨别以及数据类型的检测

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"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值