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 异步调用框架 (Part 2 - 用例设计)
Aug 03 Javascript
JavaScript 小型打飞机游戏实现原理说明
Oct 28 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
JavaScript面向对象编程入门教程
Apr 16 Javascript
alert出数组中的随即值代码
Sep 25 Javascript
Windows下Node.js安装及环境配置方法
Sep 18 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
Aug 09 Javascript
微信小程序 动画的简单实例
Oct 12 Javascript
使用webpack打包koa2 框架app
Feb 02 Javascript
详解Vue中使用插槽(slot)、聚类插槽
Apr 12 Javascript
浅谈vue中组件绑定事件时是否加.native
Nov 09 Javascript
jquery插件实现图片悬浮
Apr 16 jQuery
关于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
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
无限级别菜单的实现
2006/10/09 PHP
php Calender(日历)代码分享
2014/01/03 PHP
js控制表单不能输入空格的小例子
2013/11/20 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
Windows下安装Scrapy
2018/10/17 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python配置grpc环境
2019/01/01 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
Python识别处理照片中的条形码
2020/11/16 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
自荐信结尾
2013/10/27 职场文书
商铺门前三包责任书
2014/07/25 职场文书
人事聘任通知
2015/04/21 职场文书
大学生实习介绍信
2015/05/05 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
python和anaconda的区别
2022/05/06 Python
Redis keys命令的具体使用
2022/06/05 Redis