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 相关文章推荐
javascript add event remove event
Apr 07 Javascript
JS检测输入字符是否包含非法字符的示例代码
Feb 11 Javascript
简单js代码实现selece二级联动(推荐)
Feb 18 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
Sep 26 Javascript
node.js中的buffer.write方法使用说明
Dec 10 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
Mar 25 Javascript
将JSON字符串转换成Map对象的方法
Nov 30 Javascript
js实现日历的简单算法
Jan 24 Javascript
微信小程序表单验证错误提示效果
May 19 Javascript
解决vue页面刷新或者后退参数丢失的问题
Mar 13 Javascript
当vue路由变化时,改变导航栏的样式方法
Aug 22 Javascript
BootstrapValidator实现表单验证功能
Nov 08 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
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
PHP常用处理静态操作类
2015/04/03 PHP
php实现的mongodb操作类
2015/05/28 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
python 截取 取出一部分的字符串方法
2017/03/01 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
优秀学生干部先进事迹材料
2014/05/26 职场文书
分公司负责人任命书
2014/06/04 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书