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 新手学习常见问题解决方法
Apr 18 Javascript
关于html+ashx开发中几个问题的解决方法
Jul 18 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
Jan 26 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
Jun 25 Javascript
dul无法加载bootstrap实现unload table/user恢复
Sep 29 Javascript
Vue.js划分组件的方法
Oct 29 Javascript
Vue 动态设置路由参数的案例分析
Apr 24 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
Dec 28 Javascript
vue实现计步器功能
Nov 01 Javascript
Vue如何清空对象
Mar 03 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
一个显示天气预报的程序
2006/10/09 PHP
PHP设计模式之装饰者模式
2012/02/29 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
jquery 学习笔记一
2010/04/07 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
vue实现分页组件
2020/06/16 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python多线程扫描端口示例
2014/01/16 Python
Python使用matplotlib绘制动画的方法
2015/05/20 Python
python基础教程之匿名函数lambda
2017/01/17 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
Python3常见函数range()用法详解
2019/12/30 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
岗位职责的构建方法
2014/02/01 职场文书
百年校庆节目主持词
2014/03/27 职场文书
初中同学会活动方案
2014/08/22 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
旷课检讨书500字
2014/10/14 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
培训讲师开场白
2015/06/01 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
JavaScript执行机制详细介绍
2021/12/06 Javascript
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python