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 相关文章推荐
jQuery autocomplete插件修改
Apr 17 Javascript
鼠标焦点离开文本框时验证的js代码
Jul 19 Javascript
通过一段代码简单说js中的this的使用
Jul 23 Javascript
防止登录页面出现在frame中js代码
Jul 22 Javascript
Jquery ajax请求导出Excel表格的实现代码
Jun 08 Javascript
Javascript 制作图形验证码实例详解
Dec 22 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
Feb 05 Javascript
javascript实现二叉树的代码
Jun 08 Javascript
五步轻松实现zTree的使用
Nov 01 Javascript
Vue 指令实现按钮级别权限管理功能
Apr 23 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
Aug 03 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
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
深入理解PHP内核(一)
2015/11/10 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
如何在PHP中使用数组
2020/06/09 PHP
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
python简单程序读取串口信息的方法
2015/03/13 Python
Python KMeans聚类问题分析
2018/02/23 Python
python实现超市扫码仪计费
2018/05/30 Python
python @classmethod 的使用场合详解
2019/08/23 Python
使用Python实现牛顿法求极值
2020/02/10 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
体育专业个人的求职信范文
2013/09/21 职场文书
生日派对邀请函
2014/01/13 职场文书
消防宣传口号
2014/06/16 职场文书
公证书格式
2015/01/23 职场文书
客户经理岗位职责大全
2015/04/09 职场文书