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 相关文章推荐
PNG背景在不同浏览器下的应用
Jun 22 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 Javascript
JavaScript实现大数的运算
Nov 24 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 Javascript
JS操作xml对象转换为Json对象示例
Mar 25 Javascript
微信小程序支付之c#后台实现方法
Oct 19 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
Dec 11 Javascript
vue中element 上传功能的实现思路
Jul 06 Javascript
巧妙运用v-model实现父子组件传值的方法示例
Apr 07 Javascript
详解vue 在移动端体验上的优化解决方案
May 20 Javascript
详解js中的几种常用设计模式
Jul 16 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 4.2书写安全的脚本
2006/10/09 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
Python 时间处理datetime实例
2008/09/06 Python
使用python实现rsa算法代码
2016/02/17 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
python实现图片识别汽车功能
2018/11/30 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
社区中秋节活动方案
2014/01/29 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记