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 相关文章推荐
jQuery温习篇 强大的JQuery选择器
Apr 24 Javascript
js中的如何定位固定层的位置
Jun 15 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
Oct 23 Javascript
js实现二代身份证号码验证详解
Nov 20 Javascript
JQuery创建DOM节点的方法
Jun 11 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
JavaScript实现页面定时刷新(定时器,meta)
Oct 12 Javascript
bootstrap多层模态框滚动条消失的问题
Jul 21 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
Aug 07 Javascript
微信小程序时间轴实现方法示例
Jan 14 Javascript
原生js实现的移动端可拖动进度条插件功能详解
Aug 15 Javascript
JavaScript监听一个DOM元素大小变化
Apr 26 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
微信小程序自定义组件
2017/08/16 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
python读写LMDB文件的方法
2018/07/02 Python
python三方库之requests的快速上手
2019/03/04 Python
python文件和文件夹复制函数
2020/02/07 Python
python语言是免费还是收费的?
2020/06/15 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
幼儿园春游活动方案
2014/01/19 职场文书
《学棋》教后反思
2014/04/14 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python