区分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 相关文章推荐
表单验证的完整应用案例探讨
Mar 29 Javascript
jquery获取选中的文本和值的方法
Jul 08 Javascript
js数组依据下标删除元素
Apr 14 Javascript
js显示动态时间的方法详解
Aug 20 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
Aug 20 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
Feb 24 Javascript
React 组件渲染和更新的实现代码示例
Feb 21 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
May 01 Javascript
ElementUI中el-tree节点的操作的实现
Feb 27 Javascript
微信小程序实现点击生成随机验证码
Sep 09 Javascript
canvas多重阴影发光效果实现
Apr 20 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
PHP中的类-什么叫类
2006/11/20 PHP
php 文件缓存函数
2011/10/08 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
newxtree.js代码
2007/03/13 Javascript
快速排序 php与javascript的不同之处
2011/02/22 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
基于zTree树形菜单的使用实例
2017/12/25 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
详解python函数传参是传值还是传引用
2018/01/16 Python
Python实现的用户登录系统功能示例
2018/02/05 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
python drf各类组件的用法和作用
2021/01/12 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
应用英语专业自荐信
2014/01/26 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python