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 可以拖动的div实现代码 脚本之家修正版
Jun 26 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
Nov 30 Javascript
js图片模糊切换显示特效的方法
Feb 17 Javascript
Listloading.js移动端上拉下拉刷新组件
Aug 04 Javascript
原生js实现ajax方法(超简单)
Sep 20 Javascript
js学习笔记之事件处理模型
Oct 31 Javascript
jQuery extend()详解及简单实例
May 06 jQuery
Vue.js中extend选项和delimiters选项的比较
Jul 17 Javascript
vue2.0与bootstrap3实现列表分页效果
Nov 28 Javascript
超详细小程序定位地图模块全系列开发教学
Nov 24 Javascript
什么是SOLID
Mar 24 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连mysql和oracle数据库性能比较
2006/10/09 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
js运动动画的八个知识点
2015/03/12 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
Less 安装及基本用法
2018/05/05 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
python访问纯真IP数据库的代码
2011/05/19 Python
Windows下安装python2.7及科学计算套装
2015/03/05 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
python3实现单目标粒子群算法
2019/11/14 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
zooplus波兰:在线宠物店
2019/07/21 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
个人收入证明范本
2014/01/12 职场文书
社区戒毒工作方案
2014/06/04 职场文书
小学见习报告
2014/10/31 职场文书
铁路安全反思材料
2014/12/24 职场文书
民主生活会主持词
2015/07/01 职场文书
靠谱准确的求职信
2019/04/02 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python