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 相关文章推荐
jquery获取焦点和失去焦点事件代码
Apr 21 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
Jun 05 Javascript
简介JavaScript中fixed()方法的使用
Jun 08 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
BootStrap 弹出层代码
Feb 09 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 jQuery
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
vscode配置vue下的es6规范自动格式化详解
Mar 20 Javascript
使用typescript构建Vue应用的实现
Aug 26 Javascript
js实现select下拉框选择
Jan 11 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 Javascript
Vue文本模糊匹配功能如何实现
Jul 30 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面向对象程序设计之接口用法
2014/08/20 PHP
php树型类实例
2014/12/05 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Python中文件操作简明介绍
2015/04/13 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
django云端留言板实例详解
2019/07/22 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
平面设计自荐信
2013/10/07 职场文书
应届生求职信写作技巧
2013/10/24 职场文书
服务承诺书范文
2014/05/19 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
小学班主任评语
2014/12/29 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
小人国观后感
2015/06/11 职场文书
运动会开幕式致辞
2015/07/29 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
详细了解MVC+proxy
2021/07/09 Java/Android
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js