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 相关文章推荐
IE与FireFox中的childNodes区别
Oct 20 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
Aug 05 Javascript
jQuery截取指定长度字符串代码
Aug 21 Javascript
jQuery中closest和parents的区别分析
May 07 Javascript
Bootstrap实现带动画过渡的弹出框
Aug 09 Javascript
浅谈Webpack下多环境配置的思路
Jun 27 Javascript
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
node.js使用fs读取文件出错的解决方案
Oct 23 Javascript
小程序实现按下录音松开识别语音
Nov 22 Javascript
js实现跳一跳小游戏
Jul 31 Javascript
Javascript执行上下文顺序的深入讲解
Nov 04 Javascript
vue/cli 配置动态代理无需重启服务的方法
May 20 Vue.js
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闭包(Closure)使用详解
2013/05/02 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
javascript Math.random()随机数函数
2009/11/04 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
webpack分离css单独打包的方法
2018/06/12 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
python的re正则表达式实例代码
2018/01/24 Python
django中send_mail功能实现详解
2018/02/06 Python
django框架forms组件用法实例详解
2019/12/10 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
学生党员思想汇报范文
2014/01/09 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
优秀家长事迹材料
2014/05/17 职场文书
领导干部对照检查材料
2014/08/24 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
工作经历证明书范文
2014/11/02 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
教师自荐信范文
2015/03/06 职场文书
元旦主持词开场白
2015/05/29 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL