Javascript 中 null、NaN和undefined的区别总结


Posted in Javascript onApril 10, 2013

1.类型分析
js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。
代码

var a1; 
var a2 = true; 
var a3 = 1; 
var a4 = "Hello"; 
var a5 = new Object(); 
var a6 = null; 
var a7 = NaN; 
var a8 = undefined; 
alert(typeof a); //显示"undefined" 
alert(typeof a1); //显示"undefined" 
alert(typeof a2); //显示"boolean" 
alert(typeof a3); //显示"number" 
alert(typeof a4); //显示"string" 
alert(typeof a5); //显示"object" 
alert(typeof a6); //显示"object" 
alert(typeof a7); //显示"number" 
alert(typeof a8); //显示"undefined"

从上面的代码中可以看出未定义的值和定义未赋值的为undefined,null是一种特殊的object,NaN是一种特殊的number。
2.比较运算
var a1; //a1的值为undefined 
var a2 = null; 
var a3 = NaN; 
alert(a1 == a2); //显示"true" 
alert(a1 != a2); //显示"false" 
alert(a1 == a3); //显示"false" 
alert(a1 != a3); //显示"true" 
alert(a2 == a3); //显示"false" 
alert(a2 != a3); //显示"true" 
alert(a3 == a3); //显示"false" 
alert(a3 != a3); //显示"true"

从上面的代码可以得出结论:(1)undefined与null是相等;(2)NaN与任何值都不相等,与自己也不相等。

JavaScript undefined 属性

定义和用法
undefined 属性用于存放 JavaScript 的 undefined 值。

语法
undefined

说明
无法使用 for/in 循环来枚举 undefined 属性,也不能用 delete 运算符来删除它。
undefined 不是常量,可以把它设置为其他值。
当尝试读取不存在的对象属性时也会返回 undefined。
提示和注释
< 值等价于 undefined 运算符认为 运算来测试某个值是否是未定义的,因为="=" ="==">
< 表示无值,而>

实例
在本例中,我们将检测两个变量中未定义的一个:

<script type="text/javascript"> 
var t1="" 
var t2 
if (t1===undefined) {document.write("t1 is undefined")} 
if (t2===undefined) {document.write("t2 is undefined")} 
</script> 输出:

[补充]Null 数据类型
在 Jscript 中数据类型 null 只有一个值:null。关键字 null 不能用作函数或变量的名称。
包含 null 的变量包含“无值”或“无对象”。换句话说,该变量没有保存有效的数、字符串、boolean、数组或对象。可以通过给一个变量赋 null 值来清除变量的内容。

请注意,在 Jscript 中,null 与 0 不相等(与在 C 和 C++ 中不同)。同时应该指出的是,Jscript中 typeof 运算符将报告 null 值为 Object 类型,而非类型 null。这点潜在的混淆是为了向下兼容。
Undefined 数据类型
如下情况使返回 undefined 值:
对象属性不存在,
声明了变量但从未赋值。

注意不能通过与 undefined 做比较来测试一个变量是否存在,虽然可以检查它的类型是否为“undefined”。在以下的代码范例中,假设程序员想测试是否已经声明变量 x :

// 这种方法不起作用 
if (x == undefined) 
// 作某些操作 
// 这个方法同样不起作用- 必须检查 
// 字符串 "undefined" 
if (typeof(x) == undefined) 
// 作某些操作 
// 这个方法有效 
if (typeof(x) == "undefined") 
// 作某些操作

考虑将 undefined 值与null做比较。
someObject.prop == null;
如下情况时,比较的结果为 true,
如果属性 someObject.prop 包含 null 值,
如果属性 someObject.prop 不存在。
要检查一个对象属性是否存在,可以使用新的 in 运算符:
if ("prop" in someObject)
// someObject 有属性 'prop'
在JavaScript中,null与undefined一度使人迷惑。下面的分析,有利于你更清晰的认知它(或者让你更迷惑):
- null是关键字;undefined是Global对象的一个属性
- null是对象(空对象, 没有任何属性和方法);undefined是undefined类型的值。试试下面的代码:
document.writeln(typeof null); //return object
document.writeln(typeof undefined); //return undefined
- 对象模型中,所有的对象都是Object或其子类的实例,但null对象例外:
document.writeln(null instanceof Object); //return false
- null“等值(==)”于undefined,但不“全等值(===)”于undefined:
document.writeln(null == undefined); //return true
document.writeln(null === undefined); //return false
- 运算时null与undefined都可以被类型转换为false,但不等值于false:
document.writeln(!null, !undefined); //return true,true
document.writeln(null==false); //return false
document.writeln(undefined==false); //return false
Javascript 相关文章推荐
服务器安全设置的几个注册表设置
Jul 28 Javascript
JS 自动完成 AutoComplete(Ajax 查询)
Jul 07 Javascript
深入理解Javascript作用域与变量提升
Dec 09 Javascript
Jquery.Form 异步提交表单的简单实例
Mar 03 Javascript
如何改进javascript代码的性能
Apr 02 Javascript
jQuery实现给页面换肤的方法
May 30 Javascript
JavaScript编程中实现对象封装特性的实例讲解
Jun 24 Javascript
关于JSON与JSONP简单总结
Aug 16 Javascript
使用Vue制作图片轮播组件思路详解
Mar 21 Javascript
Node.js npm命令运行node.js脚本的方法
Oct 10 Javascript
vue仿ios列表左划删除
Sep 26 Javascript
javascript Number 与 Math对象的介绍
Nov 17 Javascript
关于IE BUG与字符串截取substr的解决办法
Apr 10 #Javascript
javascipt基础内容--需要注意的细节
Apr 10 #Javascript
使用javascipt---实现二分查找法
Apr 10 #Javascript
页面使用密码保护代码
Apr 10 #Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
Apr 10 #Javascript
提示$ is not defined错误分析及解决
Apr 09 #Javascript
js 有框架页面跳转(target)三种情况下的应用
Apr 09 #Javascript
You might like
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
隐性调用php程序的方法
2009/03/09 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
js的with语句使用方法
2007/09/21 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
js实现常用排序算法
2016/08/09 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
python学习 流程控制语句详解
2016/06/01 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
送给他或她的礼物:FUN.com
2018/08/17 全球购物
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
软件测试工程师面试问题精选
2016/10/28 面试题
企业军训感言
2014/02/08 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书