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 相关文章推荐
将光标定位于输入框最右侧实现代码
Dec 04 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
Apr 08 Javascript
javascript中的toFixed固定小数位数 简单实例分享
Jul 12 Javascript
JS 毫秒转时间示例代码
Sep 22 Javascript
jquery插件之定时查询待处理任务数量
May 01 Javascript
微信小程序  wx.request合法域名配置详解
Nov 23 Javascript
js指定步长实现单方向匀速运动
Jul 17 Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 Javascript
Vue3.0数据响应式原理详解
Oct 09 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
Jul 31 Javascript
vue 中的动态传参和query传参操作
Nov 09 Javascript
JavaScript文档对象模型DOM
Nov 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实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
js分页工具实例
2015/01/28 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
js的对象与函数详解
2019/01/21 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
Python实现文件复制删除
2016/04/19 Python
PyQt5 多窗口连接实例
2019/06/19 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
建筑行业的大学生自我评价
2013/12/08 职场文书
大学生创业计划书的用途
2014/01/08 职场文书
个人查摆剖析材料
2014/02/04 职场文书
活动宣传策划方案
2014/05/23 职场文书
选秀节目策划方案
2014/06/06 职场文书
法人代表证明书
2014/09/18 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
创业计划书之家教托管
2019/09/25 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS
DSP接收机前端设想
2022/04/05 无线电