JavaScript中的null和undefined区别介绍


Posted in Javascript onJanuary 01, 2015

JavaScript中存在2个代表信息不存在的特殊值:null和undefined。个人认为可以从以下角度来理解这两个特殊值之间的区别:

1.null代表有存储信息的容器(比如之前被赋过值的变量),但该容器中的内容为空。
2.undefined代表不存在用于存储信息的容器。

JavaScript中的null与其它多数编程语言中的null没有什么区别,基本用于表示信息值为空;而在JavaScript中下述情况下表达式返回结果为undefined:

1.从未被赋过值的变量。
2.访问某个对象不存在的属性值。
3.访问数组中不存在的成员。
4.调用没有return语句的函数。
5.调用return语句为空(“return ;”)的函数。

事实上,和Infinity、NaN一样,undefined在JavaScript中是一个全局变量,在ECMAScript 3中甚至可以被赋予其它值。ECMAScript 5纠正了这个错误,并将undefined变量设定为只读。

对于null和undefined之间的比较,可以使用===全等操作符。如果使用普通的==操作符,null与undefined是等价的:

console.log(null == undefined);//true

console.log(null === undefined);//false

在程序编写过程中,如果需要对某个变量赋以空值,一般使用null而不是undefined。其原因在于:

1.undefined一般认为是属于系统层面的、报错层面的信息缺失。
2.null一般认为是属于编程层面的、逻辑操作层面的信息值为空。

如果在程序中涉及类型转换,那么当转换为number类型时,null和undefined的结果是不一样的:

1.undefined转换为number的结果是NaN。
2.null转换为number的结果是0。

值得一提的是,空字符串和空数组转换成number后的结果也是0。

至于JavaScript中为什么要设计两个表示“没有”的值,可以参见阮一峰的博客文章。

实验

在下述实验代码中,表达式结果均为undefined:

var a;

console.log(a);
function Sample(x){

  this.x = x;

}

var s = new Sample();

console.log(s.x)

console.log(s.notExistVariable);
var n = [2,3,4];

console.log(n[8]);
function test(){

  //no return value for this function

}

console.log(test());
function test2(){

  return;

}

console.log(test2());
Javascript 相关文章推荐
jQuery下通过$.browser来判断浏览器.
Apr 05 Javascript
JavaScript 获取任一float型小数点后两位的小数
Jun 30 Javascript
javascript将url中的参数加密解密代码
Nov 17 Javascript
js实现右下角提示框的方法
Feb 03 Javascript
JS日期加减,日期运算代码
Nov 05 Javascript
JS实现简单的浮动碰撞效果示例
Dec 28 Javascript
解决iview打包时UglifyJs报错的问题
Mar 07 Javascript
localstorage实现带过期时间的缓存功能
Jun 28 Javascript
layui实现给某一列加点击事件
Oct 26 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
Aug 11 Javascript
小程序实现上传视频功能
Aug 18 Javascript
绘制微信小程序验证码功能的实例代码
Jan 05 Javascript
JavaScript中的全局对象介绍
Jan 01 #Javascript
原生javascript获取元素样式
Dec 31 #Javascript
JavaScript分析、压缩工具JavaScript Analyser
Dec 31 #Javascript
jQuery中:last-child选择器用法实例
Dec 31 #Javascript
jQuery中:nth-child选择器用法实例
Dec 31 #Javascript
jQuery中:first-child选择器用法实例
Dec 31 #Javascript
jQuery中复合属性选择器用法实例
Dec 31 #Javascript
You might like
php 不同编码下的字符串长度区分
2009/09/26 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
YII实现分页的方法
2014/07/09 PHP
PHP实现无限极分类图文教程
2014/11/25 PHP
JavaScript 密码强度判断代码
2009/09/05 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
js面向对象编程总结
2017/02/16 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
Python telnet登陆功能实现代码
2020/04/16 Python
详解Python流程控制语句
2020/10/28 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
公司培训心得体会
2014/01/03 职场文书
高考寄语大全
2014/04/08 职场文书
医德医风演讲稿
2014/05/20 职场文书
村容村貌整治方案
2014/05/21 职场文书
工作推荐信模板
2015/03/25 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
Python爬取某拍短视频
2021/06/11 Python
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python