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 相关文章推荐
Extjs4 Treegrid 使用心得分享(经验篇)
Jul 01 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
Oct 24 Javascript
Bootstrap项目实战之首页内容介绍(全)
Apr 25 Javascript
bootstrapValidator.min.js表单验证插件
Feb 09 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
Mar 01 Javascript
Javascript防止图片拉伸的自适应处理方法
Dec 26 Javascript
jQuery与vue实现拖动验证码功能
Jan 30 jQuery
微信小程序购物车、父子组件传值及calc的注意事项总结
Nov 14 Javascript
Vue实现多标签选择器
Nov 28 Javascript
JavaScript实现简单计算器功能
Dec 19 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
Nov 06 Javascript
微信小程序实现自定义底部导航
Nov 18 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
如何写php程序?
2006/12/08 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
Python内置数据类型详解
2014/08/18 Python
Python实现堆排序的方法详解
2016/05/03 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
python针对excel的操作技巧
2018/03/13 Python
python unittest实现api自动化测试
2018/04/04 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
详解Python3中ceil()函数用法
2019/02/19 Python
flask应用部署到服务器的方法
2019/07/12 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
python中的列表和元组区别分析
2020/12/30 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
美国电视购物:QVC
2017/02/06 全球购物
三分钟英语演讲稿
2014/04/24 职场文书
Python中如何处理常见报错
2022/01/18 Python