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 相关文章推荐
js鼠标左右键 键盘值小结
Jun 11 Javascript
Javascript中Event属性搜集整理
Sep 17 Javascript
常见表单重复提交问题整理及解决方法
Nov 13 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
Jun 25 Javascript
深入理解JavaScript中的尾调用(Tail Call)
Feb 07 Javascript
redux-saga 初识和使用
Mar 10 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
Aug 16 Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 Javascript
node.js基础知识汇总
Aug 25 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
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/06/28 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
php自动加载方式集合
2016/04/04 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
Gird事件机制初级读本
2007/03/10 Javascript
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
Python深入学习之装饰器
2014/08/31 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
使用python+whoosh实现全文检索
2019/12/09 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
几个Shell Script面试题
2014/04/18 面试题
公司部门司机岗位职责
2014/01/03 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
文化大革命观后感
2015/06/17 职场文书
导游词之桂林山水
2019/09/20 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
Python中的程序流程控制语句
2022/02/24 Python