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 相关文章推荐
让任务管理器中的CPU跳舞的js代码
Nov 01 Javascript
什么是JavaScript
Aug 13 Javascript
jQuery select控制插件
Aug 17 Javascript
jQuery学习笔记之jQuery的动画
Dec 22 Javascript
jquery ajax例子返回值详解
Sep 11 Javascript
原生js做的手风琴效果的导航菜单
Nov 08 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
Mar 03 Javascript
微信小程序 开发之顶部导航栏实例代码
Feb 23 Javascript
jQuery Position方法使用和兼容性
Aug 23 jQuery
vue中使用微信公众号js-sdk踩坑记录
Mar 29 Javascript
对Layer UI 模块化的用法详解
Sep 26 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 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语法(1)
2006/10/09 PHP
PHP 和 XML: 使用expat函数(一)
2006/10/09 PHP
php购物网站支付paypal使用方法
2010/11/28 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
详解js类型判断
2018/05/22 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
python的else子句使用指南
2016/02/27 Python
python如何使用unittest测试接口
2018/04/04 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
澳大利亚最受欢迎的女士度假服装:Kabana Shop
2020/10/10 全球购物
一月红领巾广播稿
2014/02/11 职场文书
建设工地安全标语
2014/06/07 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
Python快速实现一键抠图功能的全过程
2021/06/29 Python
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技
聊聊Python String型列表求最值的问题
2022/01/18 Python
服务器间如何实现文件共享
2022/05/20 Servers