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基本是同义的,都是原始类型,且只有一些细微的差别

undefinedUndefined类型只有一个值,就是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类型系统——undefined和null全面了解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
Javascript document.referrer判断访客来源网址
May 15 Javascript
js下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
Nov 26 Javascript
在每个匹配元素的外部插入新元素的方法
Dec 20 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
Oct 17 Javascript
js检查是否关闭浏览器的方法
Aug 02 Javascript
微信小程序—setTimeOut定时器的问题及解决
Jul 26 Javascript
vue中注册自定义的全局js方法
Nov 15 Javascript
前端开发之便利店收银系统代码
Dec 27 Javascript
jstree中的checkbox默认选中和隐藏示例代码
Dec 29 Javascript
一篇文章带你浅入webpack的DLL优化打包
Feb 20 Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 #Javascript
浅谈javascript中关于日期和时间的基础知识
Jul 13 #Javascript
jQuery EasyUI菜单与按钮详解
Jul 13 #Javascript
JQuery对ASP.NET MVC数据进行更新删除
Jul 13 #Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 #Javascript
Bootstrap登陆注册页面开发教程
Jul 12 #Javascript
深入浅析knockout源码分析之订阅
Jul 12 #Javascript
You might like
PHP 面向对象详解
2012/09/13 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
python解析yaml文件过程详解
2019/08/30 Python
python中return如何写
2020/06/18 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
Python list和str互转的实现示例
2020/11/16 Python
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
新东网科技Java笔试题
2012/07/13 面试题
业务主管岗位职责范本
2013/12/25 职场文书
大型车展策划方案
2014/02/01 职场文书
文化活动实施方案
2014/03/28 职场文书
班级寄语大全
2014/04/10 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
单位提档介绍信
2015/10/22 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
Window server中安装Redis的超详细教程
2021/11/17 Redis