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 相关文章推荐
IE6下js通过css隐藏select的一个bug
Aug 16 Javascript
js下通过getList函数实现分页效果的代码
Sep 17 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
js判断输入是否为数字的具体实例
Aug 03 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
Jan 09 Javascript
js完美的div拖拽实例代码
Jan 22 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
May 17 Javascript
jQuery之简单的表单验证实例
Jul 07 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
Mar 30 Javascript
Three.js中网格对象MESH的属性与方法详解
Sep 27 Javascript
详解js跨域请求的两种方式,支持post请求
May 05 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
Sep 19 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
多人战的战术与战略
2020/03/04 星际争霸
PHP5 安装方法
2006/10/09 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
详解vue axios中文文档
2017/09/12 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
ant design实现圈选功能
2019/12/17 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
django session完成状态保持的方法
2018/11/27 Python
python实现ip代理池功能示例
2019/07/05 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
python定义类self用法实例解析
2020/01/22 Python
简述python&pytorch 随机种子的实现
2020/10/07 Python
Python中Selenium模块的使用详解
2020/10/09 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL