区分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团队打造的javascript单元测试工具QUnit介绍
Feb 26 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
Jun 28 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
Jul 27 Javascript
node.js中的console.info方法使用说明
Dec 09 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
Mar 01 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 Javascript
js+html5生成自动排列对话框实例
Oct 09 Javascript
js插件实现图片滑动验证码
Sep 29 Javascript
vue+node+webpack环境搭建教程
Nov 05 Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
使用kbone解决Vue项目同时支持小程序问题
Nov 08 Javascript
在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
咖啡常见的种类
2021/03/03 新手入门
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
Python版微信红包分配算法
2015/05/04 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
高三励志标语
2014/06/05 职场文书
高考标语大全
2014/06/05 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
2014年社区工会工作总结
2014/12/18 职场文书