JS中的非空判断 undefined,null, NaN的区别
来源:互联网 发布:apache网络服务器 编辑:程序博客网 时间:2024/06/06 01:11
在介绍这三个之间的差别之前, 先来看一下JS 的数据类型。
在 Java ,C这样的语言中, 使用一个变量之前,需要先定义这个变量并指定它的数据类型,是整型,字符串型,….
但是在js 中定义变量统一使用 var , 或者不使用var 也可以使用。
那么js 中是否有数据类型的概念呢? 当然有, 使用 typeof 就可以判断这个变量的数据类型:
<!--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种为引用类型。
原始类型和引用类型有什么区别?引用的概念其他语言的引用很类似, 就是一个地址。看一下这个例子就知道了。
<!--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”的类型。
<!--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可以用来表示以下的状况
表示一个未声明的变量,
已声明但没有赋值的变量,
一个并不存在的对象属性
null 是一种特殊的object ,表示无值;
NaN是一种特殊的number ,表示无值;
比较符(== 或 ===)
使用 == ,如果两边的类型不同, js 引擎会先把它们转成相同的类型在进行值的比较;
使用 ===, 则不会进行类型转换,类型不同,肯定不相等。
实例
有了以上的知识,再来看下面一些有意思却容易混淆的例子应该就很清晰了:
<!--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 错误, 所以完整的判空可以使用如下方式:
if(typeof(s)!="undefined"&&s!=null)
- JS中的非空判断 undefined,null, NaN的区别
- Javascript 中的非空判断 undefined,null, NaN的区别
- js判断null,NaN,undefined,空字符串
- js判断undefined类型,undefined,null,NaN的区别
- js判断undefined类型,undefined,null,NaN的区别
- js判断undefined类型,undefined,null,NaN的区别
- js判断undefined类型,undefined,null,NaN的区别
- js判断undefined类型,undefined,null,NaN的区别
- js判断undefined类型,undefined,null,NaN的区别
- js判断undefined类型,undefined,null,NaN的区别
- 【转】js判断undefined类型,undefined,null,NaN的区别
- js判断undefined类型,undefined,null,NaN的区别
- js中undefined,null,NaN的区别
- js中undefined,null,NaN的区别
- js中undefined,null,NaN的区别
- js中undefined,null,NaN的区别
- js中undefined,null,NaN的区别
- js中undefined,null,NaN的区别
- 自动驻车和电子手刹傻傻分不清怎么办
- 怎么样给小孩取名字?准爸妈为孩子起名字的另类姿势
- BZOJ 2120 带修改莫队
- 复杂业务逻辑下的合理遍历
- PCL边界识别
- JS中的非空判断 undefined,null, NaN的区别
- Androidstudio中修改默认布局
- 第四章 字符串
- C语言递归穷举n位m进制数字(回溯)
- InstallShield打包程序时设为extract from exe
- Python爬虫入门:Urllib库的基本使用
- jieba中文处理
- Eclipse中将输出信息显示到控制台同时存到指定日志中
- c实现signal函数实例