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 相关文章推荐
通过身份证号得到出生日期和性别的js代码
Nov 23 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
Oct 18 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
Bootstrap CSS组件之大屏幕展播
Dec 17 Javascript
js控制文本框禁止输入特殊字符详解
Apr 07 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
基于VUE的v-charts的曲线显示功能
Oct 01 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
Nov 12 Javascript
阿望教你用vue写扫雷小游戏
Jan 20 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
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
Angularjs 基础入门
2014/12/26 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
Gap英国官网:Gap UK
2018/07/18 全球购物
大学生毕业求职的自我评价
2013/09/29 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
优秀党员获奖感言
2014/02/18 职场文书
施工员岗位职责
2014/03/16 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js