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 相关文章推荐
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
javascript验证上传文件的类型限制必须为某些格式
Nov 14 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
Sep 22 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
Jul 21 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
Aug 24 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
Feb 14 Javascript
ECMAScript6--解构
Mar 30 Javascript
Vue中如何实现proxy代理
Apr 20 Javascript
JavaScript中 ES6变量的结构赋值
Jul 10 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
JS高阶函数原理与用法实例分析
Jan 15 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
Mar 14 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 批量删除 sql语句
2009/06/05 PHP
php flv视频时间获取函数
2010/06/29 PHP
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
php多任务程序实例解析
2014/07/19 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php session的应用详细介绍
2017/03/22 PHP
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
javascript天然的迭代器
2010/10/29 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
简单了解django缓存方式及配置
2019/07/19 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
python批量修改交换机密码的示例
2020/09/22 Python
python爬取代理ip的示例
2020/12/18 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
经典洗发水广告词
2014/03/13 职场文书
个人总结与自我评价
2014/09/18 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis