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 语法基础 想学习js的朋友可以看看
Dec 16 Javascript
理解Javascript_09_Function与Object
Oct 16 Javascript
jQuery事件用法实例汇总
Aug 29 Javascript
如何用angularjs制作一个完整的表格
Jan 21 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
js实现年月日表单三级联动
Apr 17 Javascript
使用ES6语法重构React代码详解
May 09 Javascript
Vue前端开发规范整理(推荐)
Apr 23 Javascript
JS与SQL方式随机生成高强度密码示例
Dec 29 Javascript
页面内锚点定位及跳转方法总结(推荐)
Apr 24 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 Javascript
手把手教你从零开始react+antd搭建项目
Jun 03 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
提升PHP执行速度全攻略(下)
2006/10/09 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
详解小程序横屏方案对比
2020/06/28 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python实现RSA加密(解密)算法
2016/02/17 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
极简的HTML5模版
2015/07/09 HTML / CSS
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
外贸业务员岗位职责
2013/11/24 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
怒海潜将观后感
2015/06/11 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python
Golang数据类型和相互转换
2022/04/12 Golang