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 定义function的三种方式小结
Oct 16 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
Nov 30 Javascript
JS获取页面窗口大小的代码解读
Dec 01 Javascript
原生javascript实现无间缝滚动示例
Jan 28 Javascript
jquery获取一个元素下面相同子元素的个数代码
Jul 31 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
jQuery动态改变多行文本框高度的方法
Sep 07 Javascript
基于Vue实现页面切换左右滑动效果
Jun 29 Javascript
关于Vue的路由权限管理的示例代码
Mar 06 Javascript
vue的安装及element组件的安装方法
Mar 09 Javascript
jQuery中元素选择器(element)简单用法示例
May 14 jQuery
小程序分享模块超级详解(推荐)
Apr 10 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
Vue的Options用法说明
2020/08/14 Javascript
简化Python的Django框架代码的一些示例
2015/04/20 Python
python程序控制NAO机器人行走
2019/04/29 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
python 如何将office文件转换为PDF
2020/09/22 Python
Python之多进程与多线程的使用
2021/02/23 Python
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
酒店公关部经理岗位职责
2013/11/24 职场文书
小学门卫岗位职责
2013/12/17 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
卖车协议书
2014/04/21 职场文书
文艺演出策划方案
2014/06/07 职场文书
2014年德育工作总结
2014/11/20 职场文书
承诺函格式模板
2015/01/21 职场文书
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫