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 相关文章推荐
js类 from qq
Nov 13 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
Oct 21 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
Dec 12 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
js实现表格字段排序
Feb 19 Javascript
关于JavaScript命名空间的一些心得
Jun 07 Javascript
jQuery实用技巧必备(上)
Nov 02 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
Apr 07 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
Aug 12 Javascript
详解Axios统一错误处理与后置
Sep 26 Javascript
vue-simple-uploader上传成功之后的response获取代码
Sep 07 Javascript
vue实现可拖拽的dialog弹框
May 13 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
你对IPv6了解程度
2016/02/09 面试题
init进程的作用
2012/04/12 面试题
中科软测试工程师面试题
2012/06/16 面试题
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
大学生自我鉴定
2013/12/16 职场文书
文明餐桌活动方案
2014/02/11 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
销售代理协议书
2014/09/30 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
Python入门之基础语法详解
2021/05/11 Python
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python