Javascript类型系统之undefined和null浅析


Posted in Javascript onJuly 13, 2016

前面的话

一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这无疑增加了程序复杂度,但这样做也是有一定原因的。本文将详细介绍javascript中的undefined和null

历史原因

1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值。根据C语言的传统,null被设计成可以自动转为0

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。首先,null像在Java里一样,被当成一个对象。但是,JavaScript的值分成原始类型和对象类型两大类,Brendan Eich觉得表示”无”的值最好不是对象。其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误

因此,Brendan Eich又设计了一个undefined。他是这样区分的:null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN

但是,目前null和undefined基本是同义的,都是原始类型,且只有一些细微的差别

undefined

Undefined类型只有一个值,就是undefined。当声明的变量未初始化时,该变量的默认值是undefined。所以一般地,undefined表示变量没有初始化

var test;//undefined
console.log(test == undefined);//true
var test = undefined;//undefined

对于尚未声明过的变量只能执行一项操作,使用typeof操作符检测其数据类型,但严格模式下会导致错误

typeof(test);//undefined

【出现场景】

【1】已声明未赋值的变量

【2】获取对象不存在的属性

【3】无返回值的函数的执行结果

【4】函数的参数没有传入

【5】void(expression)

var i;
console.log(i);//undefined
var o = {};
console.log(o.p);//undefined
function f(){};
console.log(f());//undefined
function f(x){return x;}
console.log(f());//undefined
console.log(void(0));//undefined

【类型转换】

Boolean(undefined):  false
Number(undefined):  NaN
String(undefined):'undefined'

null

Null类型只有一个值,就是null。null是javascript语言的关键字,它表示一个特殊值,常用来描述"空值"

逻辑角度看,null值表示一个空对象指针

[注意]null是空对象指针,而[]是空数组,{}是空对象,三者不相同

console.log(typeof null);//'object'

尽管null和undefined是不同的,但它们都表示"值的空缺",null表示"空值",undefined表示"未定义"。两者往往可以互换。判断相等运算符==认为两者是相等的

console.log(null == undefined);//true

实际上,因为undefined和null不是构造器类型,所以它们没有任何的属性和方法,使用.和[]来存取这两个值的成员或方法都会产生一个类型错误

【类型转换】

Boolean(null): false
Number(null):
 0
String(null): 
 'null'

下面给大家介绍javascript中null和undefined的区别

undefined表示变量声明但未初始化时的值,null表示准备用来保存对象,还没有真正保存对象的值。从逻辑角度看,null值表示一个空对象指针。

JavaScript(ECMAScript标准)里共有5种基本类型:Undefined, Null, Boolean, Number, String,和一种复杂类型Object。可以看到null和undefined分属不同的类型,未初始化定义的值用typeof检测出来是"undefined"(字符串),而null值用typeof检测出来是"object"(字符串)。

任何时候都不建议显式的设置一个变量为undefined,但是如果保存对象的变量还没有真正保存对象,应该设置成null。
实际上,undefined值是派生自null值的,ECMAScript标准规定对二者进行相等性测试要返回true,即

alert(null==undefined); // true
Javascript 相关文章推荐
Javascript解决常见浏览器兼容问题的12种方法
Jan 04 Javascript
基于jquery的实现简单的表格中增加或删除下一行
Aug 01 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
Apr 25 Javascript
js实现的类似于asp数据字典的数据类型代码实例
Sep 03 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
Jun 18 Javascript
学习Bootstrap滚动监听 附调用方法
Jul 02 Javascript
详解a++和++a的区别
Aug 30 Javascript
浅谈JavaScript的innerWidth与innerHeight
Oct 12 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 Javascript
vue进行图片的预加载watch用法实例讲解
Feb 07 Javascript
js实现图片局部放大效果详解
Mar 18 Javascript
JavaScript判断浏览器运行环境的详细方法
Jun 30 Javascript
JS基础随笔(菜鸟必看篇)
Jul 13 #Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 #Javascript
jQuery实现div横向拖拽排序的简单实例
Jul 13 #Javascript
用jQuery向div中添加Html文本内容的简单实现
Jul 13 #Javascript
使用jQuery加载html页面到指定的div实现方法
Jul 13 #Javascript
用原生JS对AJAX做简单封装的实例代码
Jul 13 #Javascript
javascript类型系统——undefined和null全面了解
Jul 13 #Javascript
You might like
php遍历数组的方法分享
2012/03/22 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
js实现常用排序算法
2016/08/09 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
简单谈谈javascript高级特性
2019/09/04 Javascript
python分析网页上所有超链接的方法
2015/05/08 Python
Python实现合并字典的方法
2015/07/07 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
python daemon守护进程实现
2016/08/27 Python
python中hashlib模块用法示例
2017/10/30 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
python在每个字符后添加空格的实例
2018/05/07 Python
python使用正则筛选信用卡
2019/01/27 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
会计电算化专业毕业生推荐信
2013/12/24 职场文书
治庸问责心得体会
2014/09/12 职场文书
毕业赠语大全
2015/06/23 职场文书
企业催款函范本
2015/06/24 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS