区分JS中的undefined,null,"",0和false


Posted in Javascript onMarch 08, 2007

在程序语言中定义的各种各样的数据类型中,我们都会为其定义一个"空值"或"假值",比如对象类型的空值null,.NET Framework中数据库字段的空值DBNull,boolean类型的假值false等等。在JavaScript中也有很多种的"空值"和"假值",那么它们都有什么共同点和不同点呢?

    其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boolean值本身就是true和false这两种情况外,其它数据类型的"空值"主要是undefined和defined这两大类。这些空值的类型分别是: 

 typeof(undefined) == 'undefined'  
 typeof(null) == 'object'  
 typeof("") == 'string'  
 typeof(0) == 'number'  
 typeof(false) == 'boolean' 

    这五个值的共同点是,在if语句中做判断,都会执行false分支。当然从广义上来看,是说明这些数值都是其对应数据类型上的无效值或空值。还有这五个值作!运算,结果全为:true。

    这几个值中也有不同,其中undefined和null比较特殊,虽然null的类型是object,但是null不具有任何对象的特性,就是说我们并不能执行null.toString()、null.constructor等对象实例的默认调用。所以从这个意义上来说,null和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。不过相似归相似,还是有区别的,就是和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。

    另外""、0和false虽然在if语句表现为"假值",可它们都是有意义数据,只是被作为了"空值"或"假值",因为:"".toString(),(0).toString()和false.toString()都是合法的可执行表达式。

    其实这5个值在上面所说的这些差异里,并不太会给程流程控制带来太大的问题,那么要区分它们什么呢?需要注意区分的是这些值在转换为String时的差异是比较大的,它们到String的转换关系是: 

 String(undefined) -> "undefined"  
 String(null) -> "null"  
 String("") -> ""  
 String(0) -> "0"  
 String(false) -> "false" 

    这个转换关系在做字符串累加时需要特别的注意,否这会出些意想不到的问题,今天就遇到一个null被默认转为"null"给弄得迷糊了好一阵子。
Javascript 相关文章推荐
JQuery 解析多维的Json数据格式
Nov 02 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
May 17 Javascript
学习并汇集javascript匿名函数
Nov 25 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
Sep 20 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
Mar 25 Javascript
jQuery中[attribute^=value]选择器用法实例
Dec 31 Javascript
AngularJS表单编辑提交功能实例
Feb 13 Javascript
Windows系统下安装Node.js的步骤图文详解
Nov 15 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
详细教你微信公众号正文页SVG交互开发技巧
Jul 25 Javascript
如何利用vue实现波谱拟合详解
Nov 05 Javascript
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
在JavaScript中使用inline函数的问题
Mar 08 #Javascript
JS类中定义原型方法的两种实现的区别
Mar 08 #Javascript
JavaScript语言中的Literal Syntax特性分析
Mar 08 #Javascript
从JavaScript的函数重名看其初始化方式
Mar 08 #Javascript
翻译整理的jQuery使用查询手册
Mar 07 #Javascript
用window.location.href实现刷新另个框架页面
Mar 07 #Javascript
javascript中的location用法简单介绍
Mar 07 #Javascript
You might like
PHP 编程的 5个良好习惯
2009/02/20 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
smarty缓存用法分析
2014/12/16 PHP
php计算年龄精准到年月日
2015/11/17 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
Python操作CouchDB数据库简单示例
2015/03/10 Python
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Python 中的 else详解
2016/04/23 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
教师实习的自我鉴定
2013/10/26 职场文书
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
大学生活动策划方案
2014/02/10 职场文书
战略合作意向书范本
2014/04/01 职场文书
死亡赔偿协议书
2015/01/28 职场文书
南京大屠杀观后感
2015/06/02 职场文书
读书笔记格式
2015/07/02 职场文书