当前位置:编程学习 > JAVA >>

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

JS 数据类型
 
在介绍这三个之间的差别之前, 先来看一下JS  的数据类型。
 
在 Java ,C这样的语言中, 使用一个变量之前,需要先定义这个变量并指定它的数据类型,是整型,字符串型,....
 
但是在js 中定义变量统一使用 var , 或者不使用var 也可以使用。
 
那么js 中是否有数据类型的概念呢? 当然有, 使用 typeof 就可以判断这个变量的数据类型:
 
 
[javascript] 
<!--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>  
 
<!--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] 
<!--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>  
 
<!--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] 
<!--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>  
 
<!--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]
<!--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>  
 
<!--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;
&nb
补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,