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里选择超链接的实现代码
May 22 Javascript
JS中Iframe之间传值及子页面与父页面应用
Mar 11 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
Nov 13 Javascript
jQuery+css实现炫目的动态块漂移效果
Jan 28 Javascript
极易被忽视的javascript面试题七问七答
Feb 15 Javascript
jQuery控制div实现随滚动条滚动效果
Jun 07 Javascript
深入浅出 jQuery中的事件机制
Aug 23 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
webpack打包js的方法
Mar 12 Javascript
JavaScript 正则命名分组【推荐】
Jun 07 Javascript
vue-router之nuxt动态路由设置的两种方法小结
Sep 26 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
Jun 04 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
APMServ使用说明
2006/10/23 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
PHP return语句的另一个作用
2014/07/30 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
理解Javascript_13_执行模型详解
2010/10/20 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
Js+Jq获取URL参数的集中方法示例代码
2014/05/20 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python中正则表达式的用法实例汇总
2014/08/18 Python
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
python中循环语句while用法实例
2015/05/16 Python
Unicode和Python的中文处理
2017/03/19 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
Numpy之random函数使用学习
2019/01/29 Python
Python面向对象进阶学习
2019/05/21 Python
pycharm显示远程图片的实现
2019/11/04 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
python中time tzset()函数实例用法
2021/02/18 Python
网吧收银员岗位职责
2013/12/14 职场文书
列车长先进事迹材料
2014/01/25 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
教师年度个人总结
2015/02/11 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
肖申克救赎观后感
2015/06/02 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python