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判断手机号运营商是移动、联通、电信还是其他(代码简单)
Sep 25 Javascript
浅谈JS之tagNaem和nodeName
Sep 13 Javascript
WEB前端实现裁剪上传图片功能
Oct 17 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
BootStrap与Select2使用小结
Feb 17 Javascript
vue使用watch 观察路由变化,重新获取内容
Mar 08 Javascript
在Swiper内如何制作CSS3动画效果示例代码
Dec 07 Javascript
js的各种数据类型判断的介绍
Jan 19 Javascript
微信小程序登录态和检验注册过没的app.js写法
May 22 Javascript
javascript实现摄像头拍照预览
Sep 30 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
Nov 01 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
May 22 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
example2.php
2006/10/09 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
php输出图像的方法实例分析
2017/02/16 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
javascript 函数速查表
2010/02/07 Javascript
js下用层来实现select的title提示属性
2010/02/23 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
以一段代码为实例快速入门Python2.7
2015/03/31 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
退休感言
2014/01/28 职场文书
小学校长汇报材料
2014/08/20 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
让子弹飞观后感
2015/06/11 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
Nginx安装配置详解
2022/06/25 Servers