(转载)Javascript 中的非空判断 undefined,null, NaN的区别
原文地址:https://blog.csdn.net/oscar999/article/details/9353713
在介绍这三个之间的差别之前, 先来看一下JS 的数据类型。
在 Java ,C这样的语言中, 使用一个变量之前,需要先定义这个变量并指定它的数据类型,是整型,字符串型,....
但是在js 中定义变量统一使用 var , 或者不使用var 也可以使用。
那么js 中是否有数据类型的概念呢? 当然有, 使用 typeof 就可以判断这个变量的数据类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!--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><br></HTML> |
以上例子弹出的值是 "string", 由此可以看出, js 也是有数据类型的。
js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。
原始类型和引用类型有什么区别?引用的概念其他语言的引用很类似, 就是一个地址。看一下这个例子就知道了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!--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”的类型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <!--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 引擎会先把它们转成相同的类型在进行值的比较;
使用 ===, 则不会进行类型转换,类型不同,肯定不相等。
实例
有了以上的知识,再来看下面一些有意思却容易混淆的例子应该就很清晰了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!--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 错误, 所以完整的判空可以使用如下方式:
1 | if ( typeof (s)!= "undefined" &&s!= null ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律