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 相关文章推荐
用于table内容排序
Jul 21 Javascript
javascript下利用arguments实现string.format函数
Aug 24 Javascript
js中widow.open()方法使用详解
Jul 30 Javascript
JavaScript实现的使用键盘控制人物走动实例
Aug 27 Javascript
js实现拖拽效果
Feb 12 Javascript
JS函数的几种定义方式分析
Dec 17 Javascript
D3.js实现饼状图的方法详解
Sep 21 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
May 08 Javascript
JavaScript实现的浏览器下载文件的方法
Aug 09 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 Javascript
vue中在vuex的actions中请求数据实例
Nov 08 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中变量的数据类型判断函数
2017/03/04 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
php实现头像上传预览功能
2017/04/27 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
详解python中字典的循环遍历的两种方式
2017/02/07 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
意大利单身交友网站:Meetic
2020/07/12 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
环保倡议书范文
2014/05/12 职场文书
高中综合实践活动总结
2014/07/07 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
信用卡催款律师函
2015/05/27 职场文书
文艺演出主持词
2015/07/01 职场文书
银行培训心得体会范文
2016/01/09 职场文书
如何书写邀请函?
2019/06/24 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang