• Javascript 中的非空判断 undefined,null, NaN的区别


    原出处:http://blog.csdn.net/oscar999/article/details/9353713

    JS 数据类型
    在介绍这三个之间的差别之前, 先来看一下JS  的数据类型。
    在 Java ,C这样的语言中, 使用一个变量之前,需要先定义这个变量并指定它的数据类型,是整型,字符串型,....
    但是在js 中定义变量统一使用 var , 或者不使用var 也可以使用。
    那么js 中是否有数据类型的概念呢? 当然有, 使用 typeof 就可以判断这个变量的数据类型:
    [javascript] view plaincopy
    <!--Add by oscar999-->  
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
    <HTML>  
    <HEAD>  
    <TITLE> New Document </TITLE>  
    <META NAME="Author" CONTENT="oscar999">  
    <script>  
    s = "This is Test";  
    alert(typeof(s));  
    </script>  
    </HEAD>  
      
    <BODY>  
      
    </BODY>  
    </HTML>  
    以上例子弹出的值是 "string", 由此可以看出, js 也是有数据类型的。
    js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。
    原始类型和引用类型有什么区别?引用的概念其他语言的引用很类似, 就是一个地址。看一下这个例子就知道了。
    [javascript] view plaincopy
    <!--Add by oscar999-->  
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
    <HTML>  
    <HEAD>  
    <TITLE> New Document </TITLE>  
    <META NAME="Author" CONTENT="oscar999">  
    <script>  
    var obj = new Object();  
    var objCopy = obj;  
    obj.att1 = "obj attribute";  
    alert(objCopy.att1);  
    </script>  
    </HEAD>  
      
    <BODY>  
      
    </BODY>  
    </HTML>  
    
    别忽略了object 类型的这种特性哦, 这个是会被经常误用的地方。类似上面的obj的改变引起了objCopy的改变。
    除了以上5 中类型之外, 还有一种 “function”的类型。
    [javascript] view plaincopy
    <!--Add by oscar999-->  
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
    <HTML>  
    <HEAD>  
    <TITLE> New Document </TITLE>  
    <META NAME="Author" CONTENT="oscar999">  
    <script>  
     function test()  
     {  
        alert("hello");  
     }  
     alert(typeof(test));  
    </script>  
    </HEAD>  
      
    <BODY>  
      
    </BODY>  
    </HTML>  
    
     undefined 和 null, NaN 的区别
    有了上面的介绍,就可以很容易把undefined 和其他的两个区分开来。
    undefined判断的是变量的类型,而其他两个判断是变量的值。
    undefined可以用来表示以下的状况
    1. 表示一个未声明的变量,
    2. 已声明但没有赋值的变量,
    3. 一个并不存在的对象属性
    
    null 是一种特殊的object ,表示无值;
    NaN是一种特殊的number ,表示无值;
    
    比较符(== 或 ===)
    使用 == ,如果两边的类型不同, js 引擎会先把它们转成相同的类型在进行值的比较;
    使用 ===, 则不会进行类型转换,类型不同,肯定不相等。  
    
    实例
    有了以上的知识,再来看下面一些有意思却容易混淆的例子应该就很清晰了:
    [javascript] view plaincopy
    <!--Add by oscar999-->  
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
    <HTML>  
    <HEAD>  
    <TITLE> New Document </TITLE>  
    <META NAME="Author" CONTENT="oscar999">  
    <script>  
     var s;  
     alert(s==undefined); //true  
     alert(s===undefined); //true  
      
     alert(s==null); //true  
     alert(s===null); //false  
       
     alert(null==undefined); //true  
     alert(null===undefined); //false  
    </script>  
    </HEAD>  
      
    <BODY>  
      
    </BODY>  
    </HTML>  
    
    把var s 改成 var s = null 再看看效果~~
    
    一般情况下, 对js 某个变量s 判空习惯使用 if(s!=null) , 如果s 没有定义的话,就会报undefined的js 错误, 所以完整的判空可以使用如下方式:
    [javascript] view plaincopy
    if(typeof(s)!="undefined"&&s!=null)  
  • 相关阅读:
    java学习笔记07-循环
    java学习笔记06-条件语句
    java学习笔记05-运算符
    java学习笔记04-基本数据类型
    java学习笔记03-基本语法
    java学习笔记02-Eclipse IDE配置
    java学习笔记01-环境配置
    Jmeter学习笔记03-元件作用域及执行顺序
    JMeter学习笔记02-基础介绍
    [luogu3369/bzoj3224]普通平衡树(splay模板、平衡树初探)
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4550172.html
Copyright © 2020-2023  润新知