JavaScript中Null与Undefined的区别解析


Posted in Javascript onJune 30, 2015

在JavaScript中存在这样两种原始类型:Null与Undefined。这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined?

Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。

Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。

var oValue;  

alert(oValue == undefined); //output "true" 

这段代码显示为true,代表oVlaue的值即为undefined,因为我们没有初始化它。

alert(null == document.getElementById('notExistElement')); 

当页面上不存在id为"notExistElement"的DOM节点时,这段代码显示为"true",因为我们尝试获取一个不存在的对象。

alert(typeof undefined); //output "undefined"  

alert(typeof null); //output "object" 

第一行代码很容易理解,undefined的类型为Undefined;第二行代码却让人疑惑,为什么null的类型又是Object了呢?其实这是JavaScript最初实现的一个错误,后来被ECMAScript沿用下来。在今天我们可以解释为,null即是一个不存在的对象的占位符,但是在实际编码时还是要注意这一特性。

alert(null == undefined); //output "true" 

ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。但是,如果在一些情况下,我们一定要区分这两个值,那应该怎么办呢?可以使用下面的两种方法。
alert(null === undefined); //output "false"  

alert(typeof null == typeof undefined); //output "false" 

使用typeof方法在前面已经讲过,null与undefined的类型是不一样的,所以输出"false"。而===代表绝对等于,在这里null === undefined输出false。
Javascript 相关文章推荐
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
Apr 14 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
Mar 16 Javascript
js的toUpperCase方法用法实例
Jan 27 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
Jan 04 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
Jul 18 Javascript
js实现常见的工具条效果
Mar 02 Javascript
微信小程序分页加载的实例代码
Jul 11 Javascript
微信小程序实现滴滴导航tab切换效果
Jul 24 Javascript
Vue中div contenteditable 的光标定位方法
Aug 25 Javascript
基于layPage插件实现两种分页方式浅析
Jul 27 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
Jun 30 #Javascript
深入探究使JavaScript动画流畅的一些方法
Jun 30 #Javascript
使用jQuery在对象中缓存选择器的简单方法
Jun 30 #Javascript
在Node.js应用中读写Redis数据库的简单方法
Jun 30 #Javascript
javascript日期计算实例分析
Jun 29 #Javascript
javascript处理a标签超链接默认事件的方法
Jun 29 #Javascript
JavaScript使表单中的内容显示在屏幕上的方法
Jun 29 #Javascript
You might like
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
python3.4实现邮件发送功能
2018/05/28 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
Python 图片处理库exifread详解
2021/02/25 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
华为的Java面试题
2014/03/07 面试题
J2EE系统只能是基于web
2015/09/08 面试题
解除劳动合同协议书
2014/04/14 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
2015年安全月活动总结
2015/03/26 职场文书
教师节获奖感言
2015/07/31 职场文书