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的并行运算实现代码
Nov 19 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
Jan 11 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
jquery实现公告翻滚效果
Feb 27 Javascript
jQuery实现TAB选项卡切换特效简单演示
Mar 04 Javascript
jquery动态遍历Json对象的属性和值的方法
Jul 27 Javascript
Angular 4.x中表单Reactive Forms详解
Apr 25 Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 Javascript
vue+swiper实现组件化开发的实例代码
Oct 26 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
JS实现深度优先搜索求解两点间最短路径
Jan 17 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
May 28 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 文件状态缓存带来的问题
2008/12/14 PHP
浅析PHP Socket技术
2013/08/02 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
前端性能优化及技巧
2016/05/06 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
使用python Django做网页
2013/11/04 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
pycharm安装图文教程
2017/05/02 Python
Python函数式编程
2017/07/20 Python
聊聊Python中的pypy
2018/01/12 Python
python实现定时提取实时日志程序
2018/06/22 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
简单了解python代码优化小技巧
2019/07/08 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
python两种注释用法的示例
2020/10/09 Python
python switch 实现多分支选择功能
2020/12/21 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
淘宝店铺营销方案
2014/02/13 职场文书
合伙经营协议书
2014/04/18 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
党员教师一句话承诺
2014/05/30 职场文书
企业员工集体活动方案
2014/08/17 职场文书
小学毕业感言200字
2015/07/30 职场文书
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技