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 相关文章推荐
fckeditor 获取文本框值的实现代码
Feb 09 Javascript
类似GMAIL的Ajax信息反馈显示
Feb 16 Javascript
js输入框邮箱自动提示功能代码实现
Dec 10 Javascript
js实现砖头在页面拖拉效果
Nov 20 Javascript
Bootstrap实现各种进度条样式详解
Apr 13 Javascript
zTree获取当前节点的下一级子节点数实例
Sep 05 Javascript
jQuery选择器之子元素选择器详解
Sep 18 jQuery
小程序云开发如何实现图片上传及发表文字
May 17 Javascript
Vue CL3 配置路径别名详解
May 30 Javascript
微信小程序设置滚动条过程详解
Jul 25 Javascript
通过js示例讲解时间复杂度与空间复杂度
Aug 06 Javascript
js利用递归与promise 按顺序请求数据的方法
Aug 30 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 cookie与session会话基本用法实例分析
2019/11/18 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
python PyTorch预训练示例
2018/02/11 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
基于python的列表list和集合set操作
2019/11/24 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
Python脚本调试工具安装过程
2021/01/11 Python
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
计算机专业个人求职信范例
2013/09/23 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis