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
Aug 13 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
Aug 14 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
May 11 Javascript
ajax跨域调用webservice的实现代码
May 09 Javascript
浅谈JavaScript for循环 闭包
Jun 22 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
Mar 13 Javascript
详解vue事件对象、冒泡、阻止默认行为
Mar 20 Javascript
学习node.js 断言的使用详解
Mar 18 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
Oct 12 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 Javascript
js中Function引用类型常见有用的方法和属性详解
Dec 11 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
Dec 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中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
详解Vue之计算属性
2020/06/20 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
python在windows下实现备份程序实例
2014/07/04 Python
Python部署web开发程序的几种方法
2017/05/05 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
电气工程和自动化自荐信范文
2013/12/25 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
高中语文课后反思
2014/04/27 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
运动会广播稿300字
2015/08/19 职场文书
导游词之山东红叶谷
2019/10/31 职场文书