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 11 Javascript
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
Feb 08 Javascript
JS数组的遍历方式for循环与for...in
Jul 31 Javascript
JQuery设置时间段下拉选择实例
Dec 30 Javascript
javascript格式化日期时间方法汇总
Jun 19 Javascript
JS弹出对话框实现方法(三种方式)
Dec 18 Javascript
学习JavaScript设计模式之观察者模式
Apr 22 Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 Javascript
vue+axios实现登录拦截的实例代码
May 22 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
Oct 12 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
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
php不用正则验证真假身份证
2013/11/06 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
解javascript 混淆加密收藏
2009/01/16 Javascript
js里的prototype使用示例
2010/11/19 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
详解Nodejs内存治理
2018/05/13 NodeJs
JavaScript实现随机五位数验证码
2019/09/27 Javascript
iview实现图片上传功能
2020/06/29 Javascript
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
浅谈python迭代器
2017/11/08 Python
python中单下划线_的常见用法总结
2018/07/10 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
Python中Numpy mat的使用详解
2019/05/24 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
基本款天堂:Everlane
2017/05/13 全球购物
蔬菜基地的创业计划书
2014/01/06 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
开学典礼决心书
2014/03/11 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
廉洁使者实施方案
2014/03/29 职场文书
C++程序员求职信范文
2014/04/14 职场文书
活动总结书
2014/05/08 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
工程承包协议书
2014/10/20 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书