Javascript 中的非空判断 undefined,null, NaN的区别
JS 数据类型
在介绍这三个之间的差别之前, 先来看一下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可以用来表示以下的状况
1. 表示一个未声明的变量,
2. 已声明但没有赋值的变量,
3. 一个并不存在的对象属性
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)
Javascript 中的非空判断 undefined,null, NaN的区别的更多相关文章
- (转载)Javascript 中的非空判断 undefined,null, NaN的区别
原文地址:https://blog.csdn.net/oscar999/article/details/9353713 在介绍这三个之间的差别之前, 先来看一下JS 的数据类型. 在 Java ,C ...
- js判断undefined类型,undefined,null,NaN的区别
js判断undefined类型 今天使用showModalDialog打开页面,返回值时.当打开的页面点击关闭按钮或直接点浏览器上的关闭则返回值是undefined 所以自作聪明判断 ...
- [经验] 关于 Java 中的非空判断
在写项目的时候, 遇到一个问题 假设有一个控制层接口为: @ResponseBody @RequestMapping(value = "test", method = Reques ...
- JavaScript 中undefined,null,NaN的区别
1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型.var a1;var a2 = true;va ...
- js中undefined,null,NaN的区别
1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型.var a1;var a2 = true;va ...
- C/C++ 指针的非空判断
一定要分得清楚C和C++的“空指针常量”不是一样的.C标准不保证NULL等于0,所以做指针非空判断时,应该用if(p != NULL):因为“上下文转换到bool值”的统一性,C++就应该用if(p) ...
- List和String的非空判断
1.如果想判断list是否为空,可以这么判断: if(null == list || list.size() ==0 ){ //为空的情况 }else{ //不为空的情况 } 2.list.isEmp ...
- throw关键字和Objects非空判断_requireNonNull方法
作用: 可以使用throw关键字在指定的方法中抛出指定的异常 使用格式: throw new xxxException("异常产生的原因") 注意: 1.throw关键字必须写在方 ...
- 异常分类和异常的产生过程解析和Objects非空判断
java.lang.Throwable类是java语言中所有错误的异常的超类. Exception:编译期异常,进行编译(写代码)java程序出现的问题 RuntimeExeption:运行期异常,j ...
随机推荐
- QT学习 之 文本文件读写
上一章我们介绍了有关二进制文件的读写.二进制文件比较小巧,却不是人可读的格式.而文本文件是一种人可读的文件.为了操作这种文件,我们需要使用QTextStream类.QTextStream和QDataS ...
- 链接分析算法之:HITS算法
链接分析算法之:HITS算法 HITS(HITS(Hyperlink - Induced Topic Search) ) 算法是由康奈尔大学( Cornell University ) 的Jo ...
- 破解企业QQ对个人QQ登陆的限制(原创)
运行系统:WIN7 破解时间:2014-02-19 破解思路:自从2013-11-11的1.85版企业qq更新后,网上流传的破解方法(运行文件BeatQQEIM.bat)已经不起作用了,可以同时登陆, ...
- Internet Explorer 11(IE11)无法切换第三方输入法
Windows 8.1搭载了新的IE11版本,还发布了IE11 for Windows 7. IE11除了支持全尺寸Win设备以外,还比IE10更快速流畅,支持3D等高性能的浏览体验.全新F12开发者 ...
- Swift编程语言学习2.1——基础运营商(在)
操作员正在检查,更改.归并值特殊符号或短语.例如,加+这两个数字相加(例如let i = 1 + 2). 算如更复杂的逻辑和操作的实施&&(例如if enteredDoorCode & ...
- stm32之PWM
PWM是pulse width modulation的缩写,即脉冲宽度调制.其通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形: 1.PWM是一种对模拟信号电平进行数字编码的方法.通过高分辨率计 ...
- Jquery UI accordion手风琴菜单
最近学习jQuery,总结了一些心得. 1.引用 <script type="text/javascript" src=jquery.js></script> ...
- javascript:void(0)的作用示例
在做页面时,如果想做一个链接点击后不做任何事情,或者响应点击而完成其他事情,可以设置其属性 href = "#",但是,这样会有一个问题,就是当页面有滚动条时,点击后会返回到页面顶 ...
- 2014 HDU多校弟八场H题 【找规律把】
看了解题报告,发现看不懂 QAQ 比较简单的解释是这样的: 可以先暴力下达标,然后会发现当前数 和 上一个数 的差值是一个 固定值, 而且等于当前数与i(第i个数)的商, 于是没有规律的部分暴力解决, ...
- Chapter 8 工厂方法模式
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行.你想要加功能,本来是改工厂类的,而现在是修改 ...